将当前对象类型传递给基础构造函数调用(Pass current object type into base constructor call)

编程入门 行业动态 更新时间:2024-10-28 10:26:07
将当前对象类型传递给基础构造函数调用(Pass current object type into base constructor call)

如何获取继承的类的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) { } }

更多推荐

本文发布于:2023-08-05 04:28:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1428227.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   对象   类型   基础   Pass

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!