Что означает «static this ()» вне класса? - PullRequest
11 голосов
/ 02 июня 2011

Я очень хорошо знаю статические конструкторы, но что значит иметь static this() вне класса?

import std.stdio;

static this(){

  int x = 0;

}


int main(){

  writeln(x); // error

  return 0;
}

И как мне получить доступ к переменным, определенным в static this()

Ответы [ 2 ]

16 голосов
/ 02 июня 2011

Это конструктор модуля.Этот код запускается один раз для каждого потока (включая основной поток).

Существуют также деструкторы модулей, а также конструкторы и деструкторы общих модулей:

static this()
{
   writeln("This is run on the creation of each thread.");
}

static ~this()
{
   writeln("This is run on the destruction of each thread.");
}

shared static this()
{
   writeln("This is run once at the start of the program.");
}

shared static ~this()
{
   writeln("This is run once at the end of the program.");
}

Их назначение в основноминициализировать и деинициализировать глобальные переменные.

14 голосов
/ 02 июня 2011

Это конструктор модуля. Вы можете прочитать о них здесь: http://www.digitalmars.com/d/2.0/module.html

Очевидно, что вы не можете получить доступ к x в своем примере, потому что это локальная переменная конструктора модуля, также как вы не могли бы сделать это с помощью конструктора класса. Но вы можете получить доступ к глобалам области модуля (и инициализировать их, для чего нужны конструкторы модулей).

...