У меня есть класс, определяемый как:Детских статический конструктор не вызывается, когда базовый элемент доступен
public class DatabaseEntity<T> where T : DatabaseEntity<T> {
public static string Query { get; protected set; }
public static IList<T> Load() {
return Database.Get(Query);
}
}
public class Node : DatabaseEntity<Node> {
static Node() {
Node.Query = @"SELECT Id FROM Node";
}
}
Когда я бег Node.Load()
из (Window.xaml.cs
коды) статический конструктор узла никогда пожаров; или, по крайней мере, не попадает в точку останова и не задает Node.Query ничего, кроме нуля.
Есть ли причина, почему это может произойти?
Решение
Заканчивать ответы ниже на несколько решений. Для моего случая я решил просто сделать переменную Query
общедоступной и установить все экземпляры Query
в одном месте. (Не идеально, но он работает.)
Разве это де-сериализован через DataContractSerializer? Насколько я помню, DCS не запускает конструкторы. – PhillipH
Почему бы просто не сделать запрос 'private const string Query = [query];'? – atlaste
Это не так. Однако 'Load()' на самом деле является наследуемой статической функцией. Будет ли это иметь значение? –