为什么结构不能有外部属性,但方法可以吗?

mar*_*ark 6 .net

请注意以下代码:

[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}

public struct A
{
  [X]
  public static extern int XX { get; }
}
Run Code Online (Sandbox Code Playgroud)

这不编译.错误消息说

修饰符'extern'对此项无效

但是,以下代码编译好了:

[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}

public struct A
{
  [X]
  public static extern int GetXX();
}
Run Code Online (Sandbox Code Playgroud)

为什么???

编辑

伙计们,伙计们.如果我没有真正的申请,我不会问.我明白,理解为什么某些东西按照它们的方式定义的纯粹的学术兴趣不是激励我们一些人的东西,所以这里是脚踏实地的动机.我有一个PostSharp属性,它将一定的逻辑注入到属性的extern属性中.具体来说,真正的代码如下所示:

[LoggerAccessProperty]
private static extern ILog Logger { get; }
Run Code Online (Sandbox Code Playgroud)

PostSharp处理LoggerAccessProperty方面并注入实际的getter方法,其中私有静态编译器生成ILog实例.这是我们内部扩展Log4PostSharp软件包的一部分.当时,我们已经在PostSharp谷歌代码网站上发布了Log4PostSharp的扩展版本,这个属性是我最近添加的,尚未发布.

EDIT2

请注意,以下代码编译得很好:

[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}

public class A
{
  [X]
  public static extern int XX { get; }
}
Run Code Online (Sandbox Code Playgroud)

区别在于A是这里的一个类,而不是struct.

EDIT3

我使用的是.NET 4.

Yur*_*ich 1

extern结构中不允许使用属性。

  • 请参考语言规范。 (3认同)