是否应使用默认(T)或......将泛型类字段初始化为其默认值?

时间:2011-05-06 18:35:40

标签: c#

  

使用泛型默认可以用来   将类型参数设置为其默认值   值。这显然是有帮助的   通用类型不知道   实际的占位符在前面和   因此不能安全地承担什么   默认值为

通用类字段中的什么时候应该通过default(T)初始化,什么时候我们应该让编译器将字段设置为默认值,或者只是偏好:

public class myType<T>
{
    public T _unkonwType1 =  default(T);
    public T _unknownType2;
}

感谢名单

2 个答案:

答案 0 :(得分:4)

不,字段从不需要初始化为默认值。 (无论何时实例化类,它们都将被初始化。)

答案 1 :(得分:3)

您问题中的两个陈述是相同的。在第二个语句中,= default(T)基本上是隐含的,并且由编译器在引擎盖下完成。

但是,如果您明确调用default(T),即使它是多余的,它仍然可以运行。

我如何知道,看看为这两个类生成的IL(即使在发布版本中):

public class MyClass1<T>
{
  public T Field;           
}

public class MyClass2<T>
{
  public T Field = default(T);
}

你会看到编译器确实像我们要求的那样插入对default(T)的调用,但当然这个调用只会返回字段的初始值,所以不需要它。

所以,回答你的问题:你会通过明确地调用default(T)来获得(非常轻微的)性能,但我认为从长远来看它不会对它产生太大的影响。