Я совершенно новичок в C # generic, поэтому у меня следующая проблема. У меня есть 2 класса. Один экземпляр основан и другой универсальный класс.
Я хочу иметь свойство в 1-м классе типа 2-го универсального класса.
что-то в этих строках .... функциональность мудрая.
public class SampleClass
{
private SampleGenericClass<T> sampleClass;
public SampleClass(string name, int age, string version)
{
if(version == "1.0")
{
this.sampleClass = new SampleGenericClass<int>(name, age);
}
else
{
this.sampleClass = new SampleGenericClass<long>(name.age);
}
}
public void Load()
{
this.sampleClass.Load();
}
public void Open()
{
this.sampleClass.Open();
}
public void Close()
{
this.sampleClass.Close();
}
}
Мой второй родовой класс примерно такой
internal class SampleGenericClass<T> where T : class
{
private string name;
private string age;
public SampleGenericClass(string name, int age)
{
this.name = name;
this.age = age;
}
public void Load()
{
// Do something based on type
if(typeof(T) == typeof(int))
{
// load int type
}
else if(typeof(T) == typeof (long))
{
// load long type
}
else
{
throw new ArgumentException("Un supported type");
}
}
public void Open()
{
// Do something based on type
if(typeof(T) == typeof(int))
{
// open int type
}
else if(typeof(T) == typeof (long))
{
// open long type
}
else
{
throw new ArgumentException("Un supported type");
}
}
public void Close()
{
// Do something based on type
if(typeof(T) == typeof(int))
{
// close int type
}
else if(typeof(T) == typeof (long))
{
// close long type
}
else
{
throw new ArgumentException("Un supported type");
}
}
}
Теперь я понимаю, что CLR не поддерживает общие свойства или конструкторы.
Так как я могу решить эту проблему? Я все еще хочу иметь универсальный класс и каким-то образом создать его экземпляр во втором классе на основе параметров, передаваемых конструктору 1-го класса, чтобы вызывать методы load, openm, close во 2-м классе.
Спасибо за вашу помощь.
ПРИМЕЧАНИЕ. Я знаю, что приведенный выше код не компилируется, bcoz CLR не поддерживает универсальные свойства и конструкторы. Это просто для иллюстрации того, чего я хочу достичь концептуально