不能理解什么是"Where T:"在c#
本文关键字:quot Where 什么 不能 能理解 | 更新日期: 2023-09-27 18:08:53
public class TwitterResponse<T>
where T : Core.ITwitterObject
{
// all properties and methods here
}
谁能简单地给我解释一下这是什么?什么是"where"?ITwitterObject "部分在这里?在Twitterizer的源代码中看到了这一点。
这意味着T
必须实现接口Core.ITwitterObject
。
如果传递给泛型类型T
而没有实现此接口,则会发生编译时错误。
此条件允许编译器在T
的实例上调用Core.ITwitterObject
中声明的函数。
查看文档获取更多信息。
的例子:
interface IFoo { void Perform(); }
class FooList<T> where T : IFoo
{
List<T> foos;
...
void PerformForAll()
{
foreach (T foo in foos)
foo.Perform(); // this line compiles because the compiler knows
// that T implements IFoo
}
}
这比习惯的
interface IFoo { void Perform(); }
class FooList
{
List<IFoo> foos;
...
void PerformForAll()
{
foreach (IFoo foo in foos)
foo.Perform();
}
// added example method
IFoo First { get { return foos[0]; } }
}
因为像First
这样的方法将更加类型安全,所以您不需要从IFoo
向下转换到SomeRandomFooImpl
。
它是对泛型T的约束,这意味着T只能是Core.ITwitterObject
类型
这是对泛型的约束,所以约束说它必须实现Core.ITwitterObject。
http://msdn.microsoft.com/en-us/library/d5x73970%28VS.80%29.aspxwhere
关键字指定在泛型类定义中T
可以表示什么类型。在这种情况下,这意味着只有ITwitterObject(假设是一个接口)可以被表示,也就是说,你只能使用实现ITwitterObject接口的对象。
这里有一个很清楚的解释。主要摘录:
定义泛型类时,可以对类应用限制类型的类型,客户端代码可以使用的类型参数实例化你的类。如果客户端代码试图实例化类使用约束不允许的类型,则结果为编译时错误。这些限制被称为约束。使用where上下文关键字指定约束。