.net 2.0中的泛型:在类定义中使用Where类

时间:2016-12-24 14:39:16

标签: c# .net-2.0

准备"用C#编程"来自目标2.1的this书籍的认证,其中显示了以下代码的通用类型:

class MyClass<T> where T : class, new()
{
    public MyClass()
    {
        MyProperty = new T();
    }

    T MyProperty { get; set; }
}

我知道泛型类型是什么以及我们为什么需要它,但任何人都可以解释这个令人困惑的代码以及我们如何在任何示例中使用它。

1 个答案:

答案 0 :(得分:1)

我想你不明白这一部分:

where T:class,new()

这表示T必须是引用类型(即类),并且它必须具有默认构造函数(不带参数的构造函数)。这意味着T不能int,因为它是一个结构。它也不能是StreamReader,因为它没有默认的构造函数。

为什么这有用?

某些内容只能用于引用类型,而不能用于值类型,例如as。因为你说T必须有一个默认的构造函数,你可以这样做:

public MyClass()
{
    MyProperty = new T();
}
T MyProperty { get; set; }

由于T必须有默认构造函数,因此您可以调用new T()