Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Private const在类级别定义,然后在属性上使用,为什么要编译它?_C#_.net_C# 4.0_Private - Fatal编程技术网

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:它是类主体的一部分,在类声明的文本中。更有趣的是,您是否可以在应用于类本身的属性中使用该值——您可以认为它不在类的主体中。