如何获取继承的类的Type并将其传递给也继承的类的基类构造方法? 请参阅下面的代码示例:
// 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) { } }行base(typeof(this).Name, myObject)不起作用,因为我还无法引用this ,因为对象尚未完成构建,因此不存在。
是否有可能获取当前构造对象的Type ?
编辑:
将样本更正为orsogufo建议的样式 ,但仍然不起作用,因为this是未定义的。
编辑2:
为了澄清,我想最终将"InheritedClass"传递给VeryBaseClass(string className, MyObject myObject)构造函数。
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.
最满意答案
啊哈! 我找到了解决方案。 你可以用泛型来做到这一点:
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) { } }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) { } }更多推荐
发布评论