当前位置: 首页 > 编程语言 > C#

你能在C#中获取类的Merge属性吗?分享

时间:2023-04-10 22:41:55 C#

你能在C#中获取一个类的合并属性吗?假设我有以下一组类,是否可以合并DerivedClass的属性?目前,如果我使用GetType()。GetCustomAttributes()方法传入trueinheritance,会获取继承结构中最高的属性。即[another("Bob")]和[my(16)]是否可以合并属性?所以我最终会得到[My(16,"Male")]和[Another("Bob")]的两个属性我并不是说我会指定[My(16,"Male")]的属性,但返回年龄为16且性别为男性的属性。publicclassMyAttribute:Attribute{publicMyAttribute(intage){Age=age;}publicMyAttribute(intage,stringgender){Age=age;性别=性别;}publicintAge{得到;放;}publicstringGender{}}publicclassAnotherAttribute:Attribute{publicAnotherAttribute(stringname){Name=name;}公共字符串名称{得到;放;}}[My(12,"Male")][Another("Bob")]publicclassBaseClass{}[My(16)]publicclassDerivedClass:BaseClass{}您可以在实体上拥有同一属性的多个实例(这是应用于您的属性的AttributeUsageAttribute上的一个选项)。当获取一个类型的属性时,您可以获得适用于继承链的所有属性。但是,标准工具中没有任何东西可以使用两个属性实例并生成一个。(理论上,重写MSIL的后处理器可以做到这一点。)首先,我不认为您正在查询的任何行为都取决于应该装饰您的属性类的AttributeUsage属性(看起来我可能是错的)。我也看不到任何属性合并的位置。每个属性都是类本身的表示。每个属性类都应该返回自己的数据。我希望DerivedClass.GetCustomAttributes()为每个属性返回三个单独的引用-2个来自基类,1个为我自己。尝试在“MyAttribute”上设置AttributeUsage以允许多个。可能不是合并它们,而是采用属性的“最新”版本。我只是想到了其他可能导致神秘消失行为的事情。您可能需要在基类之后获取原始属性?您可以尝试:base.GetType().GetCustomAttributes();我做了一些挖掘,这就是AttributeUsage会做的,并且可能会导致您只看到一个MyAttribute类:[AttributeUsage(AttributeTargets.Class,AllowMultiple=false,Inherited=false)]但是,它是一个Inherited命名参数,这将限制基类的MyAttribute修饰的可见性。尝试指定Inherited=true并查看结果。以上是C#学习教程:C#中能获取类的合并属性吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: