指定函数参数的类型*和*接口
本文关键字:接口 类型 函数 参数 | 更新日期: 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
, ClassB
和ClassC
类,而不显式地命名它们(以便负责TopClass
及其后代的开发人员可以轻松地重新定义组,而不会干扰其他开发人员)。
您可以使用泛型约束,您可以指定类型应该派生的类和类型应该实现的接口:
void MyFunction<T>(T argument) where T : TopClass, IGroupA
{
}