在C#中,where T : class
是什么意思?
即
public IList<T> DoThis<T>() where T : class
简而言之,这是将通用参数限制为一个类(或更具体地,可以是类,接口,委托或数组类型的引用类型)。
请参阅此MSDN article了解更多详细信息。
'T'表示通用类型。这意味着它可以接受任何类型的类。以下文章可能会有所帮助:
Constraints on Type Parameters (C# Programming Guide)
它是generic type constraint。在这种情况下,这意味着通用类型T
必须是引用类型(类,接口,委托或数组类型)。
这是对T
的类型约束,指定它必须是一个类。
where
子句可用于指定其他类型约束,例如:
where T : struct // T must be a struct
where T : new() // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface
有关详细信息,请在where
clause或where
上查看MSDN页面。
将generic parameter constraints限制为引用类型。您将无法在其中放置值类型(T
和基本类型,但struct
除外)。
这意味着使用通用方法时用作string
的类型必须是一个类-即它不能是结构或内置数字,例如T
或int
double
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
字面意思是[where T: class
。它可以是任何引用类型。现在,无论何时任何代码调用您的T has to be a class
方法,它都必须提供一个类来替换T。例如,如果我要调用您的DoThis<T>()
方法,则必须按以下方式调用它:
DoThis<T>()
如果您的方法类似于以下内容:
DoThis<MyClass>();
然后在您的方法中出现T的地方,它将被MyClass替换。因此,编译器调用的最终方法将如下所示:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
这称为类型参数约束。有效地限制了T可以是什么类型。
类型参数必须是引用类型;这也适用于任何班级接口,委托或数组类型。
public IList<MyClass> DoThis<MyClass>()
{
MyClass variablename= new MyClass();
//other uses of MyClass as a type
// all occurences of T will similarly be replace by MyClass
}
T代表的对象类型,它表示可以赋予任何类型。IList:如果IList s = new IList;现在s.add(“始终接受字符串。”)。
这里T表示一个类。它可以是一个引用类型。