Как вызвать статический конструктор вне класса?
2 Neeraj Verma [2014-02-05 18:27:00]
Меня спросили в интервью:
public class Test
{
static Test(){}
}
public class Class1
{
//Call static constructor Here
}
Я попытался вызвать статический конструктор внутри конструктора базового класса. но это не похоже на правильное направление. Как ты делаешь это?
c# .net static
5 ответов
6 Alberto [2014-02-05 18:29:00]
Вы не можете вызвать статический конструктор, и вы не можете указать его видимость (public
)
Из документации:
Статический конструктор вызывается автоматически для инициализации класса до создания первого экземпляра или ссылки на любые статические члены.
2 Julien Roncaglia [2014-02-05 18:34:00]
Статические конструкторы вызываются автоматически перед любым использованием класса и не должны вызываться вручную, поэтому правильный ответ заключается в том, чтобы что-то сделать в классе Test
например:
public class Class1
{
public void CallStaticConstructorHere()
{
new Test();
}
}
Но в 99% случаев вам все равно, время выполнения вызовет его при необходимости.
В некоторых случаях (например, для принудительной инициализации во время запуска, чтобы он не выполнялся во время использования приложения или в SetUp некоторых модульных тестов), вам может потребоваться его принудительное.
Класс RuntimeHelpers
предоставляет такую возможность:
public class Class1
{
public void CallStaticConstructorHere()
{
RuntimeHelpers.RunClassConstructor(typeof(Test).TypeHandle);
}
}
PS: имя RunClassConstructor
вводит в заблуждение, запустив его, только если оно еще не запущено
PS (2): Я не знаю точного вопроса, но если интервьюер говорил о конструкторе базового класса (Class1: Test
), это бесполезно, поскольку никакой код в производном классе никогда не будет вызван без статического конструктора базового класса, называемый ранее.
1 Kuzgun [2014-02-05 18:31:00]
1 Michael B [2014-02-05 18:30:00]
Статические конструкторы не должны вызываться явно, они инициализируются до создания первого экземпляра, поэтому не могут быть отправлены параметры
0 Sinatr [2014-02-05 18:37:00]
Это легко.
Хотя вы не можете напрямую вызвать статический конструктор (как известно), вы можете удостовериться, что он называется... путем доступа к этому классу из статического конструктора (который должен сделать оператор- call static constructor here
действительным, если нет других статических конструкторы, которые получают доступ к этому классу) << Я могу получить голоса от тех, кто не понимает, записанные в скобках = D
public class Test
{
static Test(){}
}
public class Class1
{
//Call static constructor Here
static Class1()
{
// yes sir!
var test = new Test();
}
}