Почему структуры не могут иметь свойств экстерна, но методы в порядке?

Наблюдайте следующий код:

[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.

6
задан mark 4 August 2010 в 12:07
поделиться