C# .NET2.0中的泛型:在类定义上使用Where类
在准备“C#编程”认证的过程中,目标2.1中的书中显示了以下通用类型代码: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(); }
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不理解的部分。