Почему переменная const доступна в статическом методе? - PullRequest
6 голосов
/ 11 августа 2009

Я писал код, не понимая, ПОЧЕМУ я могу получить доступ к постоянным значениям внутри статического методы.

Почему можно получить доступ к 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 ]

18 голосов
/ 11 августа 2009

const члены неявно static. Они принадлежат классу, а не конкретному экземпляру. Как следствие, вы не можете использовать this.myConstant, но MyClass.myConstant.

Цитирование спецификации C # 3.0 (раздел §10.4 Константы):

Даже если константы считаются static элементами , объявление-константы не требует и не допускает модификатор a static. Ошибка в том, что один и тот же модификатор появляется несколько раз в объявлении константы.

2 голосов
/ 11 августа 2009

Почему это не должно быть возможно? Поскольку значение фиксируется во время компиляции, возможного несоответствия нет (как было бы с переменными или readonly полями, которые могут быть инициализированы различными значениями для разных экземпляров во время выполнения)

1 голос
/ 11 августа 2009

Я ожидаю, что, поскольку константа не может изменить экземпляр-экземпляр, это делает их безопасными для доступа статическим методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...