1

汎用オブジェクトについて疑問があり、自分のアイデアが簡単に実装できるかどうかわかりません...

同じインターフェイスを実装するオブジェクトがあるため、以下のコードのように、メソッドはメイン オブジェクト以外はほぼ同じです。

public bool Func1 (Bitmap img)
{
   Obj1                 treatments    = new Obj1 ();
   List<UnmanagedImage> unmanagedList = treatments.ExtractLetters(img);

   // Check image treatments
   if (!treatments.WasSuccessful)
      return false

   return true
}

public bool Func2 (Bitmap img)
{
   Obj2                 treatments    = new Obj2 ();
   List<UnmanagedImage> unmanagedList = treatments.ExtractLetters(img);

   // Check image treatments
   if (!treatments.WasSuccessful)
      return false

   return true
}

この場合、コードを複製したくありません。この Obj1 と Obj2 をジェネリックにする簡単な方法はありますか? 関数を 1 つしか記述できず、その関数はオブジェクト内でキャストを行うことができ、残りは同じであるためです。

ありがとうございました!

4

2 に答える 2

8

はい、あります - すべてがとを提供Treatmentsする共通のインターフェースを実装していると仮定すると、これを行うことができます:ITreatmentsExtractLettersWasSuccessful

interface ITreatments {
    List<UnmanagedImage> ExtractLetters(Bitmap img);
    bool WasSuccessful {get;}
}

public bool Func<T>(Bitmap img) where T : new, ITreatments
{
    T treatments    = new T();
    List<UnmanagedImage> unmanagedList = treatments.ExtractLetters(img);
    return treatments.WasSuccessful;
}

これで、この関数を次のように呼び出すことができます。

if (Func<Obj1>(img)) {
    ...
}
if (Func<Obj2>(img)) {
    ...
}
于 2013-05-06T19:45:54.100 に答える