为什么const变量在静态方法中可用?

时间:2009-08-11 15:40:58

标签: .net static language-design const

我一直在编写代码而没有意识到为什么我可以在static中访问常量值 方法。

为什么可以访问const值而不将其声明为static

例如,在IMAGE_FILE_EXTENSION

中致电AddImageToDocument(...)是合法的
public abstract class ImageDocumentReplacer : DocumentReplacer
{
    private const string IMAGE_FILE_EXTENSION = ".tif";

    private static void AddImageToDocument(int documentId, string separatedPath)
    {
        Console.WriteLine(IMAGE_FILE_EXTENSION);
    }
}

3 个答案:

答案 0 :(得分:18)

const成员隐含static。它们属于类而不是特定的实例。因此,您无法使用this.myConstantMyClass.myConstant

引用C#3.0规范(第10.4节常量):

  

即使常量被视为static成员常量声明 既不需要也不允许 static修改。同一修饰符在常量声明中多次出现是错误的。

答案 1 :(得分:2)

为什么不可能?由于该值在编译时是固定的,因此不存在可能的不一致性(因为在运行时可以将变量或readonly字段初始化为不同实例的不同值)

答案 2 :(得分:1)

我希望这样,因为常量不能改变实例到实例,这使得从静态方法访问它们是安全的。