Наблюдайте следующий код:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public struct A
{
[X]
public static extern int XX { get; }
}
Это не компилирует. В сообщении об ошибке говорится
Модификатор 'экстерн' не допустим для этого объекта
Но, следующий код компилирует хорошо:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public struct A
{
[X]
public static extern int GetXX();
}
Почему???
Править
Парни, парни. Я не спросил бы, имел, у меня не было реальное приложение для этого. Я понимаю, тот чисто академический интерес понять, почему некоторые вещи определяются путем, они, не что-то, что мотивирует некоторых из нас, таким образом, вот вниз для заземления мотивации. Я сделал, чтобы PostSharp приписал, который вводит определенную логику в приписанное свойство экстерна. А именно, реальный код похож так:
[LoggerAccessProperty]
private static extern ILog Logger { get; }
Где PostSharp обрабатывает аспект LoggerAccessProperty и вводит фактический метод получателя, который появляется, частный статический компилятор генерировал экземпляр ILog. Это - часть нашего внутреннего расширения пакета Log4PostSharp. В то время мы опубликовали расширенную версию Log4PostSharp на сайте кода PostSharp google, и этот атрибут является моим недавним дополнением, все же неопубликованным.
EDIT2
Обратите внимание на то, что следующий код компилирует очень хорошо:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public class A
{
[X]
public static extern int XX { get; }
}
Различие - то, что A является классом здесь, не структурой.
EDIT3
Я использую.NET 4.