使用相同类型的类定义where关键字

时间:2013-06-03 09:06:03

标签: c# generics

我在我正在使用的库中看到过这种定义。我对TObjectType:CSObject的位置感到疯狂。很明显,似乎我可以在约束中使用相同的时间,因为它可以工作和编译,但这究竟意味着什么?

public class CSList<TObjectType>: CSList, IList<TObjectType>, IList
    where TObjectType: CSObject<TObjectType>

1 个答案:

答案 0 :(得分:5)

这意味着TObjectType必须从CSList<TObjectType>继承。

通常使用此构造来获取基类上的类型化方法和属性,这些方法和属性将调整为您要使用的实际派生类。

声明这样的派生类:

public class SomeDerivedClass : CSList<SomeDerivedClass>

示例:

public class Base<T>
{
    public T[] Values { get; set; }
}

public TestCollection : Base<TestCollection>
{
    // here, Values inherited from Base will be:
    // public TestCollection[] Values { get; set; }
}

public OtherCollection : Base<OtherCollection>
{
    // here, Values inherited from Base will be:
    // public OtherCollection[] Values { get; set; }
}