Я совершенно не знаком с 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 оленья кожа общие свойства или конструкторами. Итак, как я могу решить эту проблему? Я все еще хочу иметь общий класс и каким-то образом создавать его в своем 2-м классе на основе параметров, переданных конструктору 1-го класса, чтобы вызвать загрузку методов openm, закрыть во втором классе.
Благодарим за помощь.
ПРИМЕЧАНИЕ: Я знаю, что приведенный выше код не компилируется, bcoz CLR не поддерживает общие свойства и конструкторы. Это только для иллюстративных целей, что я хочу, чтобы достичь концептуально
У вас есть поток дизайна в вашей программе. Если вы знаете типы, которые собираетесь использовать ('int' и' long'), просто перейдите для создания абстрактного класса с двумя реализациями, который принимает 'int', а другой возьмет 'long' – GETah