c# - 指定函数参数的类型*和*接口(interface)

标签 c# types interface polymorphism multiple-inheritance

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

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# 不支持多重继承,我一直在尝试使用接口(interface):

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

最佳答案

你可以使用 generic constraints并且您可以同时指定该类型应派生的和该类型应实现的接口(interface):

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

}

关于c# - 指定函数参数的类型*和*接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520248/

相关文章:

c# - 继承泛型类型和约束时的类型推断

c# - c# 中是否可以使用二维列表?

c# - SonarQube C#分析失败 'Not a Valid Line Offset for Pointer'

haskell - 有人可以解释一下这个函数以及如何在 Haskell 中输入它(中缀,:-:)

java - Android 将加速度计读数保存到浮点变量时出现错误?

c++ - 如何从父类转换为子类的接口(interface)

c# - 为什么 C# 不支持显式实现的虚拟方法?

c# - 如何从javascript调用dll中的方法?

c# - Xamarin Studio Storyboard​​空白

inheritance - Kotlin: "val someVar = if (xx) 1 else 1.0",为什么 someVar 是 "Any"?