2016-12-24 39 views
-2

在用于“编程在C#”认证从this书在物镜2.1,其中示出了用于通用类型的以下代码的制备:泛型在.NET 2.0:在类定义使用WHERE类

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

    T MyProperty { get; set; } 
} 

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

回答

1

我想你不明白这个部分:

where T:class,new() 

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

为什么这很有用?

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

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

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

+0

是啊,这这让我困惑的第一部分(即其中T:类,新的()) 现在按照你的解释假设我们有一个Person类像下面 类Person { 人(){ this.PersonName =“杰克”; } public string PersonName {get; set; } } 我们如何使用这个通用MyClass。 –

+1

由于'Person'是一个引用类型(一个类),它有一个默认的构造函数。它可以用作'MyClass'的泛型类型参数。你可以像这样初始化它的一个实例:'var obj = new MyClass ()'。现在'obj.MyProperty'存储一个名字为“Jack”的人。 @UsmanHayatKhan – Sweeper

+0

你应该在你的答案中包括这个,因为这可能是OP不理解的部分。 –