c# - 枚举类型的接口(interface)时,如何只获取直接继承的接口(interface)?

标签 c# .net reflection

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

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

什么代码会告诉我 Freshman 不直接实现任何接口(interface)而 Student 直接实现 IDoSchool?

换句话说(忽略不好的术语)我想要这样的东西:

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

想法?

最佳答案

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

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

在您的情况下,您能做的最好的事情就是使用 GetInterfaceMap() 检索接口(interface)映射,并确保接口(interface)的每个成员的所有实现都来自父级,而不是子级。这是您可以做的最好的事情,但仍然不能完全按照您的意愿去做。

此外,在您的情况下是否可以使用完全抽象类而不是接口(interface)?你不能做多重继承,但也许你所有的规则都暗示了一个非常线性的继承?

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

相关文章:

c# - 命名空间命名约定

reflection - golang可以将参数数量未知的函数作为另一个函数的参数吗

c# - 为什么我的默认值列自动填充日期为 0001 年 1 月 1 日?

.net - 领域驱动设计 : How to access child of aggregate root

.net - 默认情况下如何拒绝对 Web API 项目的授权

reflection - Groovy:在调用任何方法之前和之后执行代码透明

java - 跟进: Create an an array of objects from classname

Ubuntu 和 Win10 上的 C#.Net MySQL 数据库连接

c# - 将 SQL 转换为 LINQ to XML

c# - 在 ASP.NET Web 应用程序中突出显示菜单栏