Если он применяет то же самое из моих знаний о С ++ в тот же день ...
Обобщения генерируются во время компиляции , и они преобразуются во многие отдельные и отличные классы.Для каждого из этих классов статический конструктор запускается до того, как любой код ссылается на статический класс.CLR знает, на какие типы ссылаться, поскольку каждый из классов уникален .
EventSystemBase <<em> string , byte > не имеет абсолютно никакого отношения кEventSystemBase <<em> string , int >.Вы как будто написали два совершенно разных класса в своем исходном коде.
class Program
{
public static void Main()
{
var myInt = new MyGeneric<int>();
myInt.InstanceMethod();
MyGeneric<int>.StaticMethod();
MyGeneric<long>.StaticMethod();
var myLong = new MyGeneric<long>();
myLong.InstanceMethod();
Console.ReadLine();
}
}
public class MyGeneric<T>
{
static MyGeneric()
{
Console.WriteLine("Static constructor: {0}", typeof(T).Name);
}
public static void StaticMethod()
{
Console.WriteLine("Static method: {0}", typeof(T).Name);
}
public void InstanceMethod()
{
Console.WriteLine("Instance method: {0}", typeof(T).Name);
}
}