不能理解什么是"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的源代码中看到了这一点。

不能理解什么是"Where T:"在c#

这意味着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.aspx

where关键字指定在泛型类定义中T可以表示什么类型。在这种情况下,这意味着只有ITwitterObject(假设是一个接口)可以被表示,也就是说,你只能使用实现ITwitterObject接口的对象。

这里有一个很清楚的解释。主要摘录:

定义泛型类时,可以对类应用限制类型的类型,客户端代码可以使用的类型参数实例化你的类。如果客户端代码试图实例化类使用约束不允许的类型,则结果为编译时错误。这些限制被称为约束。使用where上下文关键字指定约束。