2014-11-18 3 views
0

У меня есть абстрактный класс какКогда поля в абстрактном классе инициализируются

public abstract class BaseController 
    { 
     private static string stype; 
     protected abstract List<int> integers(); 

     public List<int> Execute() 
     { 

      return this.integers(); 

     } 

    } 
} 

И у меня есть два класса Наследование от этого basecontroller класса.

Оба класса-получателя имеют методы, вызываемые из класса путем запуска потоков.

Итак, что я хочу понять, так это когда будет инициализировано частное статическое поле в вышеуказанном классе?

БЛАГОДАРЯ

ответ

0

Ваш вопрос на самом деле является справедливым немного сложнее, чем вы, наверное, догадались. Но короткая версия: CLR гарантирует, что все статические члены типа будут инициализированы не позднее первого использования элемента (*).

В вашем примере статическое поле stype никогда не назначается, поэтому оно всегда будет иметь значение по умолчанию null. CLR инициализирует его до этого значения, прежде чем какой-либо из вашего кода обратится к полю.

(*) Гарантия на самом деле немного более строгая, чем это, но IMHO - практический вопрос, который большинство людей заботится о том, можно ли получить доступ к полю до его инициализации, и ответ на это «нет», в нормальных условиях". Джон Скит обсуждал это более чем в одной статье в прошлом; вот один из них: C# and beforefieldinit

Смежные вопросы