public class TwitterResponse<T>
where T : Core.ITwitterObject
{
// all properties and methods here
}
有人可以用简单的术语解释这是什么意思吗?什么是“哪里T:Core.ITwitterObject”在这里?在Twitterizer源代码中看到了这一点。有什么例子可以更好地理解这个吗?
答案 0 :(得分:6)
这意味着T
必须实现接口Core.ITwitterObject
。
如果传递给通用类型T
未实现此接口,则会发生编译时错误。
这个条件允许编译器在Core.ITwitterObject
的实例上调用T
中声明的函数。
查看documentation了解更多信息。
示例:
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
。
答案 1 :(得分:2)
它是泛型类型T的约束。它意味着T只能是Core.ITwitterObject
类型
答案 2 :(得分:2)
这是泛型的约束,因此约束说它必须实现Core.ITwitterObject。
http://msdn.microsoft.com/en-us/library/d5x73970%28VS.80%29.aspx
答案 3 :(得分:2)
where
关键字指定泛型类定义中T
可以表示的类型。在这种情况下,它意味着只能表示ITwitterObject(可能是一个接口),即您只能使用实现ITwitterObject接口的对象。
非常清楚explanation here。关键摘录:
定义泛型类时,可以对其应用限制 客户端代码可用于类型参数的各种类型 实例化你的类。如果客户端代码试图实例化您的 具有约束不允许的类型的类,结果是a 编译时错误。这些限制称为约束。 使用where contextual关键字指定约束。