Статические кодовые блоки - PullRequest
61 голосов
/ 10 декабря 2011

Переходя от Java к C# У меня следующий вопрос: В Java я мог бы сделать следующее:

public class Application {
    static int attribute;
    static {
        attribute = 5;
    }
   // ... rest of code
}

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

Заранее спасибо,

Ответы [ 5 ]

113 голосов
/ 10 декабря 2011
public class Application() 
{     

    static int attribute;     
    static Application()
    {         
         attribute = 5;     
    }    // ..... rest of code 
}

Вы можете использовать C # эквивалент статических конструкторов . Пожалуйста, не путайте это с обычным конструктором. Обычный конструктор не имеет модификатора static перед ним.

Я предполагаю, что ваш //... rest of the code также должен быть запущен один раз. Если у вас нет такого кода, вы можете просто сделать это.

 public class Application()
 {     

    static int attribute = 5;
 }
12 голосов
/ 10 декабря 2011

Вы просто можете написать блок статического конструктора следующим образом:

static Application(){
 attribute=5;
}

Это то, о чем я мог подумать.

2 голосов
/ 10 декабря 2011

В вашем конкретном сценарии вы можете сделать следующее:

public class Application { 
    static int attribute = 5;
   // ... rest of code 
}

UPDATE:

Звучит так, будто вы хотите вызвать статический метод. Вы можете сделать это следующим образом:

public static class Application {
    static int attribute = 5;

    public static int UtilityMethod(int x) {
        return x + attribute;
    }
}
1 голос
/ 17 июля 2018

-статический конструктор не имеет параметров.
-статический класс может содержать только один статический конструктор.
-статический конструктор выполняется первым, когда мы запускаем программу.

Пример:

namespace InterviewPreparation  
{  
    public static class Program  
    {  //static Class
        static Program()  
        { //Static constructor
            Console.WriteLine("This is static consturctor.");  
        }  
        public static void Main()  
        { //static main method
            Console.WriteLine("This is main function.");  
            Console.ReadKey();  
        }  
    }  
}  

Выход:
Это статический конструктор.
Это основная функция.

1 голос
/ 26 августа 2017

Я нахожу что-то еще полезное. Если вашей переменной требуется более одного выражения / оператора для инициализации, используйте это!

static A a = new Func<A>(() => {
   // do it here
   return new A();
})();

Этот подход не ограничивается классами.

...