2017-01-13 5 views
1

かなり簡単な変換クラスを作成しました。FooBarになります。インターフェイスを使用してコンバータクラスにメソッドを追加する

私は他のクラスの複数のコンバータをしたいので、私は2つの方法でインターフェイスを設定している:

public interface IConverter<in TSource, out TDestination> 
{ 
    TDestination Convert(TSource sourceObject); 
    IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects); 
} 

そして、私のクラスはそうのようにこれを実装しています。すべてが素晴らしい作品

public class ObjectConverter : IConverter<Foo, Bar> 
{ 
    public Bar Convert(Foo sourceObject) 
    { 
     return new Bar 
     { 
      // Mapping attributes... 
     }; 
    } 
    public IEnumerable<Bar> ConvertMany(IEnumerable<Foo> sourceObjects) 
    { 
     return sourceObjects.Select(obj => new Bar 
      { 
       // Mapping attributes... 
      }); 
    }   
} 

。他のオブジェクトをソースとし、それをBarとして返すもう1つのConvertManyメソッドを追加したかったのです。 Barを返すので、このクラスに追加しても問題ありませんか、またはこのインターフェイスも実装している2番目のクラスの方が適していますか?

私はC#とインターフェイスを使用するのがかなり新しくなっているので、何が良いのかよく分かりません。

(サイドノートでは、このメイク感覚のいずれかがより良い選択肢はありますでしょうか??)

+0

もう一方のメソッドを追加したいのですか、または他のソースオブジェクトに実装されているメソッドを少なくとも両方とも追加したいだけですか? – DaKirsche

+0

どちらも動作しますが、私は 'ConvertMany'だけ必要です。 – RandomStranger

+0

のように使用してください。 'ObjectConverter:IConverter 、IConverter ' – DaKirsche

答えて

2

あなたが期待される結果を達成するために、あなたのインタフェースの別の実装を追加する必要があります

public interface IConvertFromMany<TSource, TDestination> 
{ 
    IEnumerable<TDestination> ConvertMany(IEnumerable<TSource> sourceObjects); 
} 

public interface IConverter<TSource, TDestination> : IConvertFromMany<TSource, TDestination> 
{ 
    TDestination Convert(TSource sourceObject); 

} 

がそれを使用します次のようにしてください:

public class ObjectConverter : IConverter<Foo, Bar>, IConvertFromMany<AnotherSourceObject, Bar> 
{ 
    //....your implementations here   
} 
+0

それは意味が分かりますが、私は 'ConvertMany'メソッドを使いたければどうしたらよいでしょうか?そのクラス? – RandomStranger

+0

私はこれを達成するために投稿を編集しました – DaKirsche

関連する問題