一尘不染

继承如何作用于属性?

c#

Inherited属性的bool属性指的是什么?

这是否意味着如果我用一个属性AbcAtribute(具有Inherited = true)定义我的类,并且如果我从该类继承另一个类,则派生类也将具有相同的属性应用于它?

为了用一个代码示例来阐明这个问题,请设想以下内容:

[AttributeUsage(AttributeTargets.Class, Inherited = true)]
public class Random: Attribute
{ /* attribute logic here */ }

[Random]
class Mother 
{ }

class Child : Mother 
{ }

是否Child也将Random属性应用到它?


阅读 301

收藏
2020-05-19

共1个答案

一尘不染

如果Inherited = true(默认值),则意味着您正在创建的属性可以被该属性装饰的类的子类继承。

所以-如果您使用[AttributeUsage(Inherited = true)]创建MyUberAttribute

[AttributeUsage (Inherited = True)]
MyUberAttribute : Attribute
{
   string _SpecialName;
   public string SpecialName
   { 
     get { return _SpecialName; }
     set { _SpecialName = value; }
   }
}

然后通过装饰超类来使用Attribute …

[MyUberAttribute(SpecialName = "Bob")]
class MySuperClass 
{
  public void DoInterestingStuf () { ... }
}

如果我们创建MySuperClass的子类,它将具有此属性…

class MySubClass : MySuperClass
{
   ...
}

然后实例化MySubClass的实例…

MySubClass MySubClassInstance = new MySubClass();

然后测试是否具有属性…

MySubClassInstance <-–现在具有MyUberAttribute,并将“ Bob”作为SpecialName值。

2020-05-19