C# Private const在类级别定义,然后在属性上使用,为什么要编译它?
请查看以下代码:C# Private const在类级别定义,然后在属性上使用,为什么要编译它?,c#,.net,c#-4.0,private,C#,.net,C# 4.0,Private,请查看以下代码: public class Person { private const string MyConst = "SomeValue"; [MyAttribute(MyConst)] public string Name {get;set;} } MyConst被定义为private,我认为MyAttribute不应该访问它。然而,这段代码编译得很好 有人知道原因吗?私有成员只能在声明它们的同一类主体中访问。我猜它是可访问的,因为您在同一个类中声明和使用它
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:它是类主体的一部分,在类声明的文本中。更有趣的是,您是否可以在应用于类本身的属性中使用该值——您可以认为它不在类的主体中。您为什么认为它不应该是可访问的?查阅语言规范,看看你是否能找到你认为应该被打破的规则……我不明白你为什么认为它不应该编译。@Ash我认为是因为MyAttribute
与Person
是一个独立的类,而且MyAttribute
应该不能访问另一个类中的私有成员。但是,在这种情况下,MyConst
被传递给MyAttribute
的构造函数,这是完全合法的。@JonSkeet我知道常量在类主体中是可见的。但我认为,因为MyAttribute是在属性上定义为元数据(并且它实际上不是类的一部分),所以它将无法访问私有常量。但显然我错了;-)@gsharp:它是类主体的一部分,在类声明的文本中。更有趣的是,您是否可以在应用于类本身的属性中使用该值——您可以认为它不在类的主体中。