2016-06-08 2 views
-2

Если объявить статические переменные внутри функций является ошибка, то почему объявляя неявно статические переменные константных функций не ошибка в C#Декларирование статические константные переменные в функциях

class Hello{ 
    public void hello(){ 
     static int h; //error 
    } 
} 

class Hello{ 
    public void hello(){ 
     const int h=33; //const implicitly static 
    } 
} 
+2

Там очень длительная дискуссия о том, почему C# не поддерживает статические переменные внутри функции [здесь] (https://blogs.msdn.microsoft.com/csharpfaq/2004/05/11/why-doesnt-c -Support-статические-метод-переменные /). –

+1

Переменные 'static' в функциях не допускаются. Переменные 'const'. Переменные 'const' не являются« неявно статическими », кроме как в вашем воображении, потому что переменные' static' в функциях недопустимы. Вы смотрите на это через C-цветные очки. –

ответ

3

Я предполагаю, что вы имеете в виду что-то вроде

void Main() 
{ 
    const int c = 1; 

    Console.WriteLine (c == 1); 
} 

Что является законным, поскольку ограничивает объем c этой функции. Весь компилятор с константой local заменяет все экземпляры этой ссылки постоянным значением. Так что если вы декомпилировать код, который вы увидите:

void Main() 
{ 
    Console.WriteLine (1 == 1); 
} 

Там нет такого понятия, как статической местных жителей в C#. Статические локали в C++ - это локальные переменные, которые сохраняют свои значения во всех вызовах этого метода. В C# вместо этого вы используете статический член . Константа класснеявноstatic, потому что нет причин для их создания экземпляр объектов недвижимости. Но это не означает, что constvaraibles являются «статическими» в том же смысле.

0

Вы можете использовать static variables внутри main method (или любой другой метод), но вам нужно объявить их в class:

Это совершенно нормально:

public Class YourClass 
{ 
    static int anyNumber = 5; 

    static void main(String[] args) 
    { 
    Console.WriteLine(anyNumber); 
    } 
} 

Это тоже хорошо, но в этом случае anyNumber является локальной переменной, а не статической.

public Class YourClass 
{ 

    static void main(String[] args) 
    { 
    int anyNumber = 5; 
    Console.WriteLine(anyNumber); 
    } 
} 
Смежные вопросы