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

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,我希望能够定位类ClassAClassBClassC,而无需明确命名它们(以便负责TopClass及其后代的开发人员可以轻松地重新定义组,而不会干扰其他组开发人员)。

最佳答案

您可以使用generic constraints,并且可以指定该类型应从其派生的类和该类型应实现的接口:

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

}

10-06 13:53