首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么结构不能具有外部属性,但是方法是可以的?

为什么结构不能具有外部属性,但是方法是可以的?
EN

Stack Overflow用户
提问于 2010-08-04 06:55:17
回答 4查看 293关注 0票数 5

遵守下列守则:

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}

public struct A
{
  [X]
  public static extern int XX { get; }
}

这不编译。错误信息显示

修饰符“extern”对此项无效。

但是,下面的代码编译OK:

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}

public struct A
{
  [X]
  public static extern int GetXX();
}

为什么?

编辑

伙计们伙计们。如果我没有真正的申请,我是不会问的。我明白,纯粹的学术兴趣来理解为什么某些事物被定义为他们的方式并不能激励我们中的一些人,所以这里是脚踏实地的动机。我有一个PostSharp属性,它向属性外接属性注入某种逻辑。具体来说,真正的代码如下所示:

代码语言:javascript
复制
[LoggerAccessProperty]
private static extern ILog Logger { get; }

其中,PostSharp处理LoggerAccessProperty方面并注入实际的getter方法,该方法显示私有静态编译器生成的ILog实例。这是我们对Log4PostSharp包内部扩展的一部分。当时,我们已经在Log4PostSharp代码站点上发布了PostSharp的扩展版本,这个属性是我最近添加的,但还没有发布。

EDIT2

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

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}

public class A
{
  [X]
  public static extern int XX { get; }
}

区别是A是一个类,而不是结构。

EDIT3

我正在使用.NET 4。

EN

回答 4

Stack Overflow用户

发布于 2010-08-04 07:08:59

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

票数 1
EN

Stack Overflow用户

发布于 2010-08-04 07:15:53

外露修饰符用于声明外部实现的方法。

以上是extern关键字的第一行文档。(加重音)。考虑到它只适用于方法(而不是属性),人们不得不问:你到底想做什么?事实上,它是一个结构而不是一个类,并且在代码示例中存在一个属性,这两者似乎都是红色鲱鱼。

票数 1
EN

Stack Overflow用户

发布于 2010-08-04 10:06:59

因为外部方法声明没有提供实际的实现,所以没有,也没有方法主体;方法声明只是以分号结尾,签名之后没有大括号({ })。

因此,如果您将代码更改为:

代码语言:javascript
复制
[LoggerAccessProperty]
private static extern ILog Logger();

它在你的结构中应该能正常工作。

参考链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3403249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档