¿Cómo funciona la herencia para los atributos?

¿A qué se refiere la propiedad de bool Inherited en los atributos?

¿Significa que si defino mi clase con un atributo AbcAtribute (que tiene Inherited = true ) y si heredo otra clase de esa clase, que la clase derivada también tendrá ese mismo atributo aplicado a ella?

Para aclarar esta pregunta con un ejemplo de código, imagine lo siguiente:

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

¿El Child también tiene el atributo Random aplicado?

Cuando Heredado = verdadero (que es el valor predeterminado) significa que el atributo que está creando puede ser heredado por subclases de la clase decorada por el atributo.

Entonces, si crea MyUberAttribute con [AttributeUsage (Inherited = true)]

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

Luego usa el atributo decorando una superclase …

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

Si creamos una subclase de MySuperClass tendrá este atributo …

 class MySubClass : MySuperClass { ... } 

Luego crea una instancia de MySubClass …

 MySubClass MySubClassInstance = new MySubClass(); 

Luego prueba para ver si tiene el atributo …

MySubClassInstance <--- ahora tiene MyUberAttribute con "Bob" como el valor SpecialName.

Sí, eso es precisamente lo que significa. Atributo

 [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(true).First());