Pass current object type into base constructor call
c#, constructor, inheritance, types
Solution
Ah Hah! I found a solution. You can do it with generics:
public abstract class VeryBaseClass
{
public VeryBaseClass(string className, MyObject myObject)
{
this.ClassName = className;
}
public string ClassName{ get; set; }
}
public abstract class BaseClass<T> : VeryBaseClass
{
public BaseClass(MyObject myObject)
: base(typeof(T).Name, myObject)
{
}
}
public class InheritedClass : BaseClass<InheritedClass>
{
public InheritedClass(MyObject myObject)
: base(myObject)
{
}
}
Problem
How do I grab the `Type` of the inherited class and pass it into the base constructor of the class also inherited? See the code sample below: ``` // VeryBaseClass is in an external assembly public abstract class VeryBaseClass { public VeryBaseClass(string className, MyObject myObject) { } } // BaseClass and InheritedClass are in my assembly public abstract class BaseClass : VeryBaseClass { public BaseClass(MyObject myObject) : base(this.GetType().Name, myObject) // can't reference "this" (Type expected) { } } public class InheritedClass : BaseClass { public InheritedClass(MyObject myObject) { } } ``` The line `base(typeof(this).Name, myObject)` doesn't work because I can't reference `this` yet, as the object hasn't finished constructing and therefore doesn't exist. Is it possible to grab the `Type` of the currently constructing object? EDIT: Corrected the sample as orsogufo suggested, but still doesn't work, as `this` is undefined. EDIT 2: Just to clarify, I want to end up with `"InheritedClass"` being passed into the `VeryBaseClass(string className, MyObject myObject)` constructor.