【问题标题】:Use typeof in generic class在泛型类中使用 typeof
【发布时间】:2013-07-28 17:17:36
【问题描述】:

我像这样创建通用类:

public class Sample<T> where T : class
{
    public DoSomething();
}

然后我创建新类:

public class Sample2
{
    Sample<Sample2> obj=new Sample<Sample2>();
}

为什么我不能使用下面的代码在Sample2 类中创建Sample 类的实例?

        Sample<typeof<this>> obj=new Sample<typeof<this>>();

【问题讨论】:

  • 主要是因为泛型是在编译时评估的。 typeof 函数在运行时返回一个 Type 类。您可以改用 Activator.CreateInstance:msdn.microsoft.com/en-us/library/wccyzw83.aspx
  • 另外,我认为您不能在字段初始化程序中引用 this,因为此时尚未构造对象
  • 因为:1. typeof 不是通用的。这是typeof(...)。 2. typeof 采用类型文字(或参数),而不是引用。 3. 泛型和Types 不能混用(不是没有反射):要么使用强类型泛型,要么使用反射和Type/typeof

标签: c# generics


【解决方案1】:

答案很简单泛型需要是Compile time,但在Compile time 期间您显然不知道您在做什么

【讨论】:

  • 我不确定你的意思。首先,泛型也是 .Net 运行时特性,而不仅仅是 C# 编译时特性。其次,当前类的类型在编译时肯定是已知的吗?如果有的话,你不会知道Sample&lt;T&gt;T 的类型(可怕的名字),但事实并非如此。
  • 有道理,但不完全正确。阅读此答案以了解如何操作:stackoverflow.com/a/687420/72350
  • @Diego 感谢您的评论。我知道反射方法,但一般来说,除非真的需要,否则应该避免反射。
猜你喜欢
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2019-07-16
  • 2020-11-15
  • 1970-01-01
相关资源
最近更新 更多