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

本文关键字:类型参数 继承 泛型类 | 更新日期: 2023-09-27 18:18:41

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

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

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

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

public class MyClass<T> where T: IAmSomethingSpecial

它称为类型参数约束。

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

public class MyClass<T> where T : MyBaseClass

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

你想要

的是一个通用约束:

public class MyClass<T> where T : SomeParentClass
你需要

一个泛型约束:

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

where 关键字允许您指定对给定泛型类型的约束。您可以将接口换成类。

阅读文档。通用约束。

class MyClass<T> where T : someinterfaceorbaseclassthatTmustinherit