【发布时间】:2015-03-30 11:16:03
【问题描述】:
我有以下情况:
class Base<T>
class Derived : Base<Derived>
我知道基类知道谁是子类是一种不好的做法。我想实现一个Singleton基类,为此基类必须知道派生类是谁,所以请不要评论这种不好的做法。
有没有办法获取派生类类型?
使用反射获取类型显然是有问题的,因为反射是一种静态的,你不能涵盖多个派生类的情况。
编辑:也许我不够清楚。我的意思是我希望能够在不指定泛型参数的情况下继承基类。将自己传递给基类有点愚蠢
【问题讨论】:
-
在您的示例中,您可以在将作为派生类型的基类中引用 T。
-
我希望能够在不指定泛型参数的情况下继承基类。 嗯,不,你不能那样做。至少不是静态类型语言(大部分情况下)。
-
指定泛型参数是不可能的,因为您不能在好奇的递归模板中强制派生类在 C# 中传递正确的类(本身)...
-
使用反射绝对没有问题...你为什么从singleTone类派生?同样,单音在 99% 的情况下都是不合适的,通常是一种不好的做法
-
现在它对您没有意义这一事实并不意味着它在实际用例中没有意义。只有当它会崩溃和燃烧时,你才应该制作单调的东西。而您真正要寻找的可能是某种“工厂”设计模式
标签: c# generics inheritance reflection