gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:48:52 24 4
gpt4 key购买 nike

观察以下代码:

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

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

这不编译。错误消息说

The modifier 'extern' is not valid for this item



但是,以下代码编译正常:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}

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

为什么 ???

编辑

伙计们,伙计们。如果我没有真正的应用程序,我不会问这个问题。我理解,纯粹的学术兴趣来理解为什么有些事情是这样定义的,这并不能激励我们中的一些人,所以这里是脚踏实地的动机。我有一个 PostSharp 属性,它将某种逻辑注入(inject)到属性 extern 属性中。具体来说,真正的代码如下所示:
[LoggerAccessProperty]
private static extern ILog Logger { get; }

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

编辑2

请注意,以下代码编译得很好:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}

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

不同之处在于 A 在这里是一个类,而不是结构。

编辑3

我正在使用.NET 4。

最佳答案

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

关于.net - 为什么结构不能有外部属性,但方法可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3403249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com