私は完全にC#の一般的な新機能ですので、次の問題があります。私は2つのクラスを持っています。 1つのインスタンスベースおよび別の汎用クラス。 2番目のジェネリッククラスの1番目のクラスにプロパティを設定したいと思います。ジェネリッククラスを別のインスタンスクラスのプロパティにする方法は?
これらの行には何か....機能性があります。
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();
}
}
私の第二の一般的なクラスは、今私はCLRは、一般的なプロパティやコンストラクタをサポートdoesntのことを理解し、この
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");
}
}
}
のようなものです。 どうすればこの問題を解決できますか?私はまだジェネリッククラスを持っていて、何とか第2クラスで、第1クラスのコンストラクタに渡されたparamsに基づいてインスタンス化します。つまり、第2クラスのload、openm、closeメソッドを呼び出します。
ありがとうございました。
注:上記のコードはコンパイルされないことを知っていますが、bcoz CLRは汎用プロパティとコンストラクタをサポートしていません。
public class SampleClass<T> where T : ....
{
private SampleGenericClass<T> sampleClass;
public SampleClass(string name, int age, string version)
{
this.sampleClass = new SampleGenericClass<T>(name, age);
}
public void Load()
{
this.sampleClass.Load();
}
}
とあなたのSampleClassを作成します。それはちょうど私がIMOあなたが上位に決定すべき概念的
プログラムにデザインフローがあります。あなたが使う型を知っているなら( 'int'と' long')、 'int'と' long'sを取る2つの実装を持つ抽象クラスを作成してください。 – GETah