1

のような型に基づいてオブジェクトを返すメソッドを実装する必要があります。

 public interface IBase
{ 
}
public class Base1 : IBase { }
public class Base2 : IBase { }
public class Base3 : IBase { }
public class MyClass
{
    public IBase GetObject<T>() where T:IBase
    {
        // should return the object based on type.
        return null;
    }

}

GetObject メソッド内のように辞書を維持する必要がありますか?

            Dictionary<Type, IBase> test = new Dictionary<Type, IBase>();

同じためのより良い方法はありますか?

[編集]: - 毎回オブジェクトを作成したくありません。メモリ内と呼び出しがあるときにそれを保持する必要があります。そこからオブジェクトを返したい。辞書以外に方法はありますか?

4

3 に答える 3

3
public class MyClass {
    public IBase GetObject<T>() where T:IBase, new() // EDIT: Added new constraint 
    {
        // should return the object based on type.
        return new T();
    }

}
于 2012-11-20T03:52:19.960 に答える
2

new()制約をジェネリック型パラメーターに追加できます。Constraints on Type Parameters (C# Programming Guide) をお読みください。次に、次のようになります。

public T GetObject<T>() where T : IBase, new()
{
    return new T();
}

そしてそれを使う

IBase b = GetObject<Base1>();

実際には、タイプに基づいてオブジェクトを作成する組み込みメソッド、つまりActivator.CreateInstance メソッドがあります。

IBase b = Activator.CreateInstance<Base1>();
于 2012-11-20T03:56:01.980 に答える