【问题标题】:Private const defined on class level and then used on an attribute, why this compile?Private const 在类级别定义,然后在属性上使用,为什么要编译?
【发布时间】: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 中。跨度>

标签: c# .net c#-4.0 private


【解决方案1】:

私有成员只能在声明它们的同一类主体中访问。我猜它是可访问的,因为您在同一个类中声明和使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2019-07-16
    相关资源
    最近更新 更多