我试图谷歌这个,但我能找到的只是普通类声明的文件。
public class DataContextWrapper<T> : IDataContextWrapper where T : DataContext, new()
{
}
我看到该类实现了IDataContextWrapper,继承自DataContext,并根据实例化的方式因类型T而异。
我不知道“where T
”或“, new()
”可能意味着什么。
答案 0 :(得分:38)
它是generic constraint并限制可以将哪些类型传递到通用参数。
在您的情况下,它要求T
与DataContext
相同或派生,并且具有默认(无参数)构造函数(new()
约束)。
你需要通用约束来实际使用泛型类型做一些非常简单的事情。
new()
约束允许您使用new T()
创建实例。DataContext
约束允许您在DataContext
T
的方法
MSDN写道:
where T : <base class name>
type参数必须是或来自指定的基类。
where T : new()
type参数必须具有公共无参数构造函数。与其他约束一起使用时,必须最后指定new()约束。
答案 1 :(得分:13)
仅允许从派生或实现DataContext的类型T,并且具有不带参数的公共构造函数。
答案 2 :(得分:9)
它是generic type constraint并指定泛型类型的约束(例如,只有类,或者必须实现特定的接口)。
在这种情况下,T
必须是DataContext
或从其继承的类,并且必须具有无参数的公共构造函数(new()
约束)。
答案 3 :(得分:5)
这是一种通用类型限制。在这种情况下,T必须从DataContext继承,并且是一个带有不带参数的构造函数的类型。
答案 4 :(得分:4)
其中T:DataContext读作:T必须是(或从a派生)DataContext “,new()”读作:必须有一个无参数构造函数。
答案 5 :(得分:4)
where
关键字用于约束您的泛型类型变量,在您的情况下,它意味着类型T
必须是DataContext
并且必须包含公共默认构造函数。
答案 6 :(得分:2)
可以用作通用的类型中的约束。这为您提供了编译器检查以及使用T做一些有意义的事情的能力。
IE中。 new()
告诉编译器T必须有一个无参数构造函数。这意味着你可以通过编写new T();
来实例化T的实例,并且知道T也是一个DataContext,你既可以创建T的实例,也可以调用它的方法。
答案 7 :(得分:2)
这是一种泛型约束。 MSDN有更多相关信息。
答案 8 :(得分:2)
在哪里对T的类型设置约束。新的说明类型T必须是可实例化的,没有任何参数。即T thing = new T();
查看更多here