【发布时间】:2013-05-10 02:46:52
【问题描述】:
看看下面的代码:
public class Person
{
private const string MyConst = "SomeValue";
[MyAttribute(MyConst)]
public string Name {get;set;}
}
MyConst 被定义为private,我认为它不应该被 MyAttribute 访问。然而,这段代码编译得很好。
有人知道原因吗?
【问题讨论】:
-
为什么完全你认为它不应该是可访问的?查阅语言规范,看看你是否能找到你认为应该被打破的规则......
-
我不明白你为什么认为它不应该编译。
-
@Ash 我认为是因为
MyAttribute是与Person分开的类,而MyAttribute不应该能够访问另一个类中的私有成员。但是,在这种情况下,MyConst被传递给MyAttribute的构造函数,这是完全合法的。 -
@JonSkeet 我知道该常量在类主体中是可见的。但我认为因为 MyAttribute 是在属性上定义为元数据(并且它实际上不是类的一部分),所以它将无法访问私有常量。但显然我错了;-)
-
@gsharp:嗯,它是类主体的一部分——它在类声明的文本中。更有趣的是,您是否可以在应用于类本身的属性中使用该值 - 您真的可以争辩说它不在类的 body 中。跨度>