En respuesta a this question intenté usar Type.GetCustomAttributes(true)
en una clase que implementa una interfaz que tiene un atributo definido en él. Me sorprendió descubrir que GetCustomAttributes
no devolvió el atributo definido en la interfaz. ¿Por qué no? ¿Las interfaces no son parte de la cadena de herencia?En .Net, ¿por qué no se declaran atributos en las interfaces cuando se llama a Type.GetCustomAttributes (true)?
Código de ejemplo:
[Attr()]
public interface IInterface { }
public class DoesntOverrideAttr : IInterface { }
class Program
{
static void Main(string[] args)
{
foreach (var attr in typeof(DoesntOverrideAttr).GetCustomAttributes(true))
Console.WriteLine("DoesntOverrideAttr: " + attr.ToString());
}
}
[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class Attr : Attribute
{
}
Salidas: Nada
Ok, eso tiene sentido. No había pensado cómo permitir esto sería como abrir la lata de gusanos de herencia múltiple. ¡Buena respuesta! –
¡Gracias! Me gusta responder preguntas con más preguntas. :) – cdhowie