ジェネリックスを使用してインターフェイスタイプをクラスにマップする

helion3

Get____Factoryアプリケーションにいくつかのメソッドがあり、それらをジェネリックで統合したいのですが、まだC#を調整しており、a)ジェネリックが正しい方法であるかどうか100%確信が持てず、b)C#がジェネリックを処理する方法をまだ学習しています。

最終的には、ファクトリインターフェイスとそのクラスの辞書/マップを作成します。すべてのファクトリを簡単にアクセスできる方法に統合したいだけでなく、プラグインの作成者が自分のファクトリを登録する方法を許可する必要があります(そしてこの方法でそれらにアクセスできます)。

私はこのようなものから始めました:

注:最終的には、インターフェースタイプをそれらの実装にマップする辞書または方法があります-if / else条件は醜く一時的ですが、単にテストする方法です。

public T GetFactory<T>() where T : IFactory {
    var t = typeof(T);

    if (t.Equals(typeof(IRecipeFactory))) {
        var factory = new RecipeFactory();
        return factory;
    }

    else if (t.Equals(typeof(IItemFactory))) {
        var factory = new ItemFactory();
        return factory;
    }

    else if (t.Equals(typeof(ITileFactory))) {
        var factory = new TileFactory();
        return factory;
    }
}

で失敗するCannot implicitly convert type 'RecipeFactory' to 'T'ため、これは機能しません。長期的には、条件文はありませんが、クラスをそのタイプで検索します。ただし、キャストの問題の解決策が見つかるまで、どちらも機能しません。

他の回答に基づいて、ダブルキャスティング((T) (object)を試しましたが、InvalidCastException: Cannot cast from source type to destination type.でエラーが発生しました

これは貧弱なアーキテクチャであるか、ジェネリックを誤って使用しています。

マットローランド

Tメソッドがを返すので、途中でオブジェクトをキャストする必要がありますTこのキャストを行うにはfactoryIFactory

public T GetFactory<T>() where T : IFactory
{
    var t = typeof(T);

    if (t.Equals(typeof(IRecipeFactory)))
    {
        IFactory factory = new RecipeFactory();
        return (T)factory;
    }

    if (t.Equals(typeof(IItemFactory)))
    {
        IFactory factory = new ItemFactory();
        return (T)factory;
    }

    if (t.Equals(typeof(ITileFactory)))
    {
        IFactory factory = new TileFactory();
        return (T)factory;
    }

    throw new InvalidOperationException("Type not supported");
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ジェネリックJSONオブジェクトをGSONを使用してMapインターフェースにマップします

分類Dev

抽象クラスはジェネリックインターフェイスタイプを実装します

分類Dev

子ジェネリックインターフェイスを使用してジェネリックインターフェイスを実装する方法

分類Dev

ジェネリックプロトコルをインターフェースとして使用する

分類Dev

特定のタイプなしでジェネリックインターフェイスを使用しますか?

分類Dev

ジェネリックインターフェイスタイプのメンバーに暗黙的にキャストできないジェネリックインターフェイスを閉じるクラスのインスタンス

分類Dev

インターフェイスとジェネリックを使用してJavaでボタンを描画する

分類Dev

Typescript-パラメータに応じてジェネリックインターフェイスタイプを返します

分類Dev

ジェネリックラッパーインターフェイスタイプをどのように定義し、それをJavaのメソッド戻りタイプとして使用するのですか?

分類Dev

タイプが特定のジェネリックインターフェイスタイプを実装しているかどうかを判断する方法

分類Dev

タイプを指定せずにTypeScriptジェネリッククラスをインスタンス化する

分類Dev

Typescriptでジェネリック値を使用してインデックスタイプを記述する方法

分類Dev

Javaジェネリックを使用してクラスをインターフェース/抽象化するコンストラクター

分類Dev

Javaは、実行時に取得されたタイプパラメータを使用してジェネリックインスタンスを作成します

分類Dev

別のインターフェイスを使用して、インターフェイスからジェネリックメソッドを実装する

分類Dev

別のインターフェイスを使用して、インターフェイスからジェネリックメソッドを実装する

分類Dev

共通のcreateValueメソッドを定義するパラメーターを持つケースクラスのシェイプレスのジェネリックデフォルトインスタンスを使用してビルドします

分類Dev

Guiceを使用してジェネリックインターフェイスサブタイプの実装を注入する

分類Dev

Java-ジェネリックスを使用して流暢なインターフェースを作成する

分類Dev

ジェネリックインターフェイスの実装をプロパティに割り当てる

分類Dev

ジェネリックインターフェイスに応じてクラスプロパティを取得する

分類Dev

不明なオブジェクトをインターフェイスのジェネリックインターフェイスにキャストします(最初は明示的なジェネリックタイプのジェネリックコレクションタイプのタイプから)

分類Dev

ジェネリックスを使用して、インターフェイスの配列に同じ型のプロパティを適用します

分類Dev

kotlinのジェネリックス-インターフェース制限を実装するタイプ

分類Dev

インターフェイスでジェネリックを使用する

分類Dev

インターフェイスでジェネリックを使用する方法

分類Dev

ジェネリッククラスに基づいてジェネリックインターフェイスを定義する方法

分類Dev

Javaリストのタイプとしてジェネリッククラスを使用する

分類Dev

Scalaにジェネリックジェネリックインターフェイスを実装する

Related 関連記事

  1. 1

    ジェネリックJSONオブジェクトをGSONを使用してMapインターフェースにマップします

  2. 2

    抽象クラスはジェネリックインターフェイスタイプを実装します

  3. 3

    子ジェネリックインターフェイスを使用してジェネリックインターフェイスを実装する方法

  4. 4

    ジェネリックプロトコルをインターフェースとして使用する

  5. 5

    特定のタイプなしでジェネリックインターフェイスを使用しますか?

  6. 6

    ジェネリックインターフェイスタイプのメンバーに暗黙的にキャストできないジェネリックインターフェイスを閉じるクラスのインスタンス

  7. 7

    インターフェイスとジェネリックを使用してJavaでボタンを描画する

  8. 8

    Typescript-パラメータに応じてジェネリックインターフェイスタイプを返します

  9. 9

    ジェネリックラッパーインターフェイスタイプをどのように定義し、それをJavaのメソッド戻りタイプとして使用するのですか?

  10. 10

    タイプが特定のジェネリックインターフェイスタイプを実装しているかどうかを判断する方法

  11. 11

    タイプを指定せずにTypeScriptジェネリッククラスをインスタンス化する

  12. 12

    Typescriptでジェネリック値を使用してインデックスタイプを記述する方法

  13. 13

    Javaジェネリックを使用してクラスをインターフェース/抽象化するコンストラクター

  14. 14

    Javaは、実行時に取得されたタイプパラメータを使用してジェネリックインスタンスを作成します

  15. 15

    別のインターフェイスを使用して、インターフェイスからジェネリックメソッドを実装する

  16. 16

    別のインターフェイスを使用して、インターフェイスからジェネリックメソッドを実装する

  17. 17

    共通のcreateValueメソッドを定義するパラメーターを持つケースクラスのシェイプレスのジェネリックデフォルトインスタンスを使用してビルドします

  18. 18

    Guiceを使用してジェネリックインターフェイスサブタイプの実装を注入する

  19. 19

    Java-ジェネリックスを使用して流暢なインターフェースを作成する

  20. 20

    ジェネリックインターフェイスの実装をプロパティに割り当てる

  21. 21

    ジェネリックインターフェイスに応じてクラスプロパティを取得する

  22. 22

    不明なオブジェクトをインターフェイスのジェネリックインターフェイスにキャストします(最初は明示的なジェネリックタイプのジェネリックコレクションタイプのタイプから)

  23. 23

    ジェネリックスを使用して、インターフェイスの配列に同じ型のプロパティを適用します

  24. 24

    kotlinのジェネリックス-インターフェース制限を実装するタイプ

  25. 25

    インターフェイスでジェネリックを使用する

  26. 26

    インターフェイスでジェネリックを使用する方法

  27. 27

    ジェネリッククラスに基づいてジェネリックインターフェイスを定義する方法

  28. 28

    Javaリストのタイプとしてジェネリッククラスを使用する

  29. 29

    Scalaにジェネリックジェネリックインターフェイスを実装する

ホットタグ

アーカイブ