指定函数参数的类型*和*接口

本文关键字:接口 类型 函数 参数 | 更新日期: 2023-09-27 18:11:07

我有一个类的结构,我想应用一些奇怪的约束:

public abstract class TopClass {}
public class ClassA : Topclass {}
public class ClassB : Topclass {}
public class ClassC : Topclass {}
public class ClassD : Topclass {}
public class ClassE : Topclass {}

我想把这些分类,其中一些重叠,所以我可以在使用TopClass时需要这样或那样的组合。由于c#不支持多重继承,我一直在尝试使用接口:

public abstract class TopClass {}
public interface IGroupA {}
public interface IGroupB {}
public class ClassA : Topclass, IGroupA          {}
public class ClassB : Topclass, IGroupA          {}
public class ClassC : Topclass, IGroupA, IGroupB {}
public class ClassD : Topclass, IGroupB          {}
public class ClassE : Topclass, IGroupB          {}

这一切都很好,但实际上使用这种疯狂的是我遇到麻烦的地方。我不知道如何指定一个函数的参数应该是类型TopClass和实现接口IGroupA 。IE,我希望能够针对ClassA, ClassBClassC类,而不显式地命名它们(以便负责TopClass及其后代的开发人员可以轻松地重新定义组,而不会干扰其他开发人员)。

指定函数参数的类型*和*接口

您可以使用泛型约束,您可以指定类型应该派生的和类型应该实现的接口:

void MyFunction<T>(T argument) where T : TopClass, IGroupA
{
}