【发布时间】:2013-09-03 13:06:38
【问题描述】:
假设我有一个接口IAppModule,由几个类实现。是否有可能编写一个只能应用于公开IAppModule 的类型的自定义属性?如果有,怎么做?
【问题讨论】:
-
不要用属性装饰这些类,而是尝试为该元数据添加额外的属性到接口。
标签: c# .net css custom-attributes
假设我有一个接口IAppModule,由几个类实现。是否有可能编写一个只能应用于公开IAppModule 的类型的自定义属性?如果有,怎么做?
【问题讨论】:
标签: c# .net css custom-attributes
不,很遗憾这是不可能的。
但是,当使用反射处理属性时,您可以检查修饰类型是否是实现 IAppModule 接口的类。
typeof(someType).GetInterfaces().Contains(typeof(IAppModule))
它不会阻止您的属性的用户错误地使用它(在任何其他类中),但是如果您决定采用这种方法,我建议您提供非常清晰的文档来描述应该如何使用该属性并添加我上面提到的验证层。
【讨论】:
someType is IAppModule 会做同样的事情,但看起来更准确。
someType 可以成为 IAppModule。 ProfK 只想要实现该接口的类,而不是接口本身。