inheritance如何为属性工作?
属性上的Inherited
bool属性是指什么?
这是否意味着如果我使用属性AbcAtribute
(具有Inherited = true
)定义我的类,并且如果我从该类inheritance另一个类,那么派生类也将具有相同的属性应用于它?
为了用代码示例阐明这个问题,想象下面的内容:
[AttributeUsage(AttributeTargets.Class, Inherited = true)] public class Random: Attribute { /* attribute logic here */ } [Random] class Mother { } class Child : Mother { }
Child
是否也应用了Random
属性?
当Inherited = true(这是默认值)时,意味着您正在创build的属性可以由该属性修饰的类的子类inheritance。
所以 – 如果你用[AttributeUsage(Inherited = true)]创buildMyUberAttribute
[AttributeUsage (Inherited = True)] MyUberAttribute : Attribute { string _SpecialName; public string SpecialName { get { return _SpecialName; } set { _SpecialName = value; } } }
然后使用属性通过装饰超级…
[MyUberAttribute(SpecialName = "Bob")] class MySuperClass { public void DoInterestingStuf () { ... } }
如果我们创build一个MySuperClass的子类,它将拥有这个属性…
class MySubClass : MySuperClass { ... }
然后实例化一个MySubClass的实例…
MySubClass MySubClassInstance = new MySubClass();
然后testing,看它是否有属性…
MySubClassInstance <—现在具有“Bob”作为SpecialName值的MyUberAttribute。
是的,这正是它的意思。 属性
[AttributeUsage(Inherited=true)] public class FooAttribute : System.Attribute { private string name; public FooAttribute(string name) { this.name = name; } public override string ToString() { return this.name; } } [Foo("hello")] public class BaseClass {} public class SubClass : BaseClass {} // outputs "hello" Console.WriteLine(typeof(SubClass).GetCustomAttributes().First());