1

おい。ユーザーが特定の型のパラメータを渡して、メソッドにその型の新しいオブジェクトをインスタンス化させるメソッドを持つことは可能ですか? 私はこのようなことをしたいと思います:(ジェネリックが行くべきかどうかはわかりませんが、試してみました)

    public void LoadData<T>(T, string id, string value) where T : new()
    {

        this.Item.Add(new T() { ID=id, Val = value});

    }

上記は機能しませんが、アイデアは、ユーザーがインスタンス化したいオブジェクト タイプを渡し、メソッドがそれらのパラメーターに基づいて詳細を入力するというものです。Enumパラメータを渡してSwitch、それに基づいて新しいオブジェクトを作成することもできますが、もっと良い方法はありますか? ありがとう

4

3 に答える 3

6

これを行う唯一の方法は、設定するパラメーターも指定するインターフェイスを追加することです。

public interface ISettable
{
    string ID { get; set; }
    string Val { get; set; }
}

public void LoadData<T>(string id, string value) where T : ISettable, new()
{
    this.Item.Add(new T { ID = id, Val = value });
}

残念ながら、現時点では検証するためのテストを行うことができません。

于 2010-09-29T18:06:57.103 に答える
1

IDおよびプロパティが共通の基本クラスまたはインターフェイスから取得された場合、その型を継承するようにVal制限できます。T

例えば:

public void LoadData<T>(string id, string value) where T : IMyInterface, new()

IMyInterfaceその後、インスタンスのすべてのメンバーを使用できTます。

それらがたまたま同じ名前を持つ異なるタイプの無関係なプロパティである場合は、リフレクションを使用する必要があります。

T,また、パラメータ リストから削除する必要があります。

于 2010-09-29T18:06:55.917 に答える
0

より動的に型付けされた言語は、それを簡単に行うことができます。C# なら可能だと思いますが、もっと手間がかかります。おそらく、ここで役立つリフレクション ライブラリがいくつかあります。

メソッドを呼び出すときにオブジェクトを作成しないのはなぜですか? あなたがやろうとしていることは、私にはあまりにも複雑に思えます。

于 2010-09-29T18:19:48.247 に答える