Поскольку вы изменили свой код, я считаю, что вам нужно понять, как работают дженерики в .NET.
Статика в генериках ведет себя немного иначе, чем в обычных случаях. Для каждого предоставленного вами уникального открытого типа T базовый класс поддерживает уникальное статическое значение члена.
Вы создаете еще один экземпляр открытого типа double для того же базового класса через Derived , тогда вы увидите концепцию, о которой я говорю.
Вот пример кода, чтобы продемонстрировать более наглядно:
public class Base<T>
{
public static string str = null;
static Base()
{
str = "hello";
Console.WriteLine("Ctor cald");
}
}
public class Derived1<T> : Base<T>{}
public class Derived2<T> : Base<T> { }
public partial class Program
{
public static void Main()
{
Derived1<int> derv = new Derived1<int>();
Derived2<double> derv2 = new Derived2<double>();
Derived2<double> derv3 = new Derived2<double>();
Console.ReadKey();
}
}
Здесь вы увидите только 2 вызова статического Ctor.