Вы можете использовать одну функцию .net: если у вас есть статические члены-данные в универсальном классе, .net создает различные экземпляры статических данных-членов для каждого используемого вами универсального типа.
Итак, вы можете написать:
public abstract class A<T> where T : A<T>
{
protected static int myVariable { get; set; }
}
И наследуйте ваши классы как:
public class B : A<B>
{
public B()
{
myVariable = 1;
}
public int GetVariable()
{
return myVariable;
}
}
public class C : A<C>
{
public C()
{
myVariable = 2;
}
public int GetVariable()
{
return myVariable;
}
}
Тогда каждый экземпляр B
будет иметь общий доступ к одному экземпляру myVariable
, а каждый экземпляр C
будетимеет общий доступ к другому.
Итак, если вы добавите Set(int a)
метод:
public void Set(int a)
{
myVariable = a;
}
и выполните следующий код:
static void Main(string[] args)
{
B b1 = new B();
C c1 = new C();
B b2 = new B();
C c2 = new C();
Console.Write("{0}; ", b1.GetVariable()); // 1
Console.Write("{0}; ", b2.GetVariable()); // 1
Console.Write("{0}; ", c1.GetVariable()); // 2
Console.Write("{0}; ", c2.GetVariable()); // 2
Console.WriteLine();
c2.Set(333);
Console.Write("{0}; ", b1.GetVariable()); // 1
Console.Write("{0}; ", b2.GetVariable()); // 1
Console.Write("{0}; ", c1.GetVariable()); // 333
Console.Write("{0}; ", c2.GetVariable()); // 333
Console.ReadLine();
}
Вы получите: 1; 1; 2; 2;
1; 1; 333; 333;
выход.