C#:如何设计泛型类,以便type参数必须继承某个类?

时间:2011-12-22 15:29:42

标签: c# .net class generics

我写了一个看起来像这样的课:

public class MyClass<T>
{
    public void doSomething()
    {
       T.somethingSpecial;
    }
}

此代码无法编译,因为编译器不知道T是什么。我想约束T,以便它必须继承某个定义somethingSpecial的类。如果您可以通过限制T来告诉我如何做同样的事情,那么它必须实现某个界面。

6 个答案:

答案 0 :(得分:14)

public class MyClass<T> where T: IAmSomethingSpecial

它被称为Constraints on Type Parameters

答案 1 :(得分:4)

在类声明中使用以下类型参数约束:

public class MyClass<T> where T : MyBaseClass

您可以阅读有关类型参数约束的更多信息,例如here at MSDN

答案 2 :(得分:4)

你想要的是generic constraint

public class MyClass<T> where T : SomeParentClass

答案 3 :(得分:1)

您需要Generic Constraint

public class MyClass<T> where T : ISomeInterface
{
  public void doSomething()
  {
    instanceOfT.somethingSpecial();
  }
}

答案 4 :(得分:1)

阅读文档。通用约束。

class MyClass<T> where T : someinterfaceorbaseclassthatTmustinherit

答案 5 :(得分:1)

public interface ISomeInterface
{
    void DoSomething();
}

public class MyClass<T> where T : ISomeInterface
{
    public void doSomething()
    {
       T.DoSomething();
    }
}

where关键字允许您指定给定泛型类型的约束。你可以换掉一个类的接口。