【问题标题】:Getting type of derived class from base class从基类获取派生类的类型
【发布时间】:2015-03-30 11:16:03
【问题描述】:

我有以下情况:

class Base<T>
class Derived : Base<Derived>

我知道基类知道谁是子类是一种不好的做法。我想实现一个Singleton基类,为此基类必须知道派生类是谁,所以请不要评论这种不好的做法。

有没有办法获取派生类类型?

使用反射获取类型显然是有问题的,因为反射是一种静态的,你不能涵盖多个派生类的情况。

编辑:也许我不够清楚。我的意思是我希望能够在不指定泛型参数的情况下继承基类。将自己传递给基类有点愚蠢

【问题讨论】:

  • 在您的示例中,您可以在将作为派生类型的基类中引用 T。
  • 我希望能够在不指定泛型参数的情况下继承基类。 嗯,不,你不能那样做。至少不是静态类型语言(大部分情况下)。
  • 指定泛型参数是不可能的,因为您不能在好奇的递归模板中强制派生类在 C# 中传递正确的类(本身)...
  • 使用反射绝对没有问题...你为什么从singleTone类派生?同样,单音在 99% 的情况下都是不合适的,通常是一种不好的做法
  • 现在它对您没有意义这一事实并不意味着它在实际用例中没有意义。只有当它会崩溃和燃烧时,你才应该制作单调的东西。而您真正要寻找的可能是某种“工厂”设计模式

标签: c# generics inheritance reflection


【解决方案1】:

不确定您在寻找什么,但基类中的代码在用作派生类的一部分时知道其类型:

class C1 
{
   public C1() { Console.WriteLine(this.GetType().Name);}
}
class C2: C1 {  }

new C2(); // writes C2 from C1's constructor.

【讨论】:

    【解决方案2】:

    如果您想要TRuntimeType,请在Base&lt;T&gt; 中使用Type derivedType = typeof(T)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 2011-03-05
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      相关资源
      最近更新 更多