我不确定这里的确切术语。基本上,如果我有一个像这样的模型:

class Student : IDoSchool {}
class Freshman : Student {}
interface IDoSchool {}


什么代码可以告诉我Freshman不直接实现任何接口,而Student直接实现IDoSchool?

换句话说(不考虑不良术语),我想要这样的东西:

typeof(Freshman).GetInterfaces(BindingFlags.DeclaredOnly); // nothing
typeof(Student).GetInterfaces(BindingFlags.DeclaredOnly); // IDoSchool


有什么想法吗?

最佳答案

我怀疑接口的语义与您要执行的操作不一致。

一个接口只是说一个类必须隐含一个成员列表。该类继承了接口,但是实现从父类继承的接口仍然是子类的责任。在大多数情况下,父级已经提供了一个实现,因此我们倾向于认为接口实现与继承相同,但实际上它们是完全不同的概念。

对于您来说,最好的办法是使用GetInterfaceMap()获取接口映射,并确保接口的每个成员的所有实现都来自父级,而不是子级。这是您可以做的最好的事情,但是仍然无法完全完成您想做的事情。

另外,在您的情况下,是否可以使用完全抽象的类而不是接口?您不能进行多重继承,但是也许所有规则都暗示着非常线性的继承?

关于c# - 枚举类型的接口(interface)时,如何仅获得那些直接继承的接口(interface)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/537408/

10-17 00:59