C# .NET2.0中的泛型:在类定义上使用Where类

C# .NET2.0中的泛型:在类定义上使用Where类,c#,.net-2.0,C#,.net 2.0,在准备“C#编程”认证的过程中,目标2.1中的书中显示了以下通用类型代码: class MyClass<T> where T : class, new() { public MyClass() { MyProperty = new T(); } T MyProperty { get; set; } } classmyclass,其中T:class,new() { 公共MyClass() { MyProperty=newt(); }

在准备“C#编程”认证的过程中,目标2.1中的书中显示了以下通用类型代码:

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

    T MyProperty { get; set; }
}
classmyclass,其中T:class,new()
{
公共MyClass()
{
MyProperty=newt();
}
T MyProperty{get;set;}
}

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

我想你不理解这部分:

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

这为什么有用

有些东西只能与引用类型一起使用,而不能与值类型一起使用,例如
as
。因为您说过
T
必须有一个默认构造函数,所以您可以这样做:

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

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

是的,这是让我感到困惑的第一部分(即T:class,new()),现在根据您的解释,假设我们有一个类似下面类Person{Person(){this.PersonName=“Jack”}的Person类公共字符串PersonName{get;set;}}如何将该泛型MyClass与此一起使用。因为
Person
是一个引用类型(类),并且它有一个默认构造函数。它可以用作
MyClass
的泛型类型参数。您可以这样初始化它的实例:
var obj=new MyClass()
。现在
obj.MyProperty
存储一个名为“Jack”的人@Usmanhayatkhan你应该在你的答案中包含这一点,因为这可能是OP不理解的部分。