派生类中的强制属性声明

我最近阅读了有关属性和reflection的内容,我认为在我的程序中包含元数据是一种很好的方法。 我有这个抽象类,我希望从它inheritance的所有类都向类声明一些属性,因为我希望为我的程序创建自定义组件(那些派生类),并希望在运行时读取这些类的元数据。 但是,派生类都必须显式声明我存储元数据的属性。 那么如何在派生类中强制执行属性声明呢? 谢谢。

将属性类定义为自身具有AttributeUsageAttribute属性,其中Inherited属性为true

或者不这样做,因为那是默认的……

派生目标(即,如果属性在类上的类,方法,如果它在方法上,等等)将inheritance该属性而不显式声明。

如果用“force”,你的意思是“编译时执行”:你不能。

正如Daniel所说,你不能在编译时强制执行属性。

但是如果你想在运行时读取数据,为什么还要烦恼属性和reflection呢? 您可以在抽象类中创建抽象方法:

 abstract class Base { public abstract string Metadata(); } class Derived1 : Base { public override string Metadata() { return "Metadata for Derived1"; } } class Derived2 : Base // won't compile, since Metadata has not been provided { } 

当然,行为略有不同。 使用此选项,您需要引用派生类的实例 ,而不仅仅是类型信息本身。 另一方面,它避免了reflection。

正如丹尼尔所说,你无法在编译时强迫。 您可以将属性添加到抽象父级并拾取它们。

另一种选择是添加一个方法来检查父类中是否存在attrribute,如果不存在则抛出exception。 从合适的方法中调用它。