observar el siguiente código:¿Por qué las estructuras no pueden tener propiedades externas, pero los métodos son correctos?
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public struct A
{
[X]
public static extern int XX { get; }
}
Esto no compila. El mensaje de error dice
El modificador 'extern' no es válido para este artículo
embargo, el código siguiente se compila OK:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public struct A
{
[X]
public static extern int GetXX();
}
Por qué ???
EDITAR
chicos, chicos. No hubiera preguntado si no hubiera tenido una aplicación real para esto. Entiendo que el interés puramente académico de entender por qué algunas cosas se definen tal como son no es algo que nos motive a algunos de nosotros, así que aquí está la motivación realista. Tengo un atributo PostSharp, que inyecta una cierta lógica en la propiedad externa atribuida. Específicamente, el código real se ve así:
[LoggerAccessProperty]
private static extern ILog Logger { get; }
Dónde PostSharp procesa el aspecto LoggerAccessProperty e inyecta el método getter real, que las superficies de compilador estático privada generada ejemplo iLog. Esto es parte de nuestra extensión interna del paquete Log4PostSharp. En ese momento, hemos publicado la versión extendida de Log4PostSharp en el sitio de código de Google PostSharp y este atributo es mi última incorporación, pero aún no se ha publicado.
Edit2
Tenga en cuenta, que el código siguiente se compila bien:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public class A
{
[X]
public static extern int XX { get; }
}
La diferencia es que A es una clase aquí, no estructura.
Edit3
estoy usando .NET 4.
La clase compila bien, pero la gran pregunta es ¿realmente se ejecuta? –
Por favor, lea mi primer EDIT de la pregunta. – mark