2016-08-12 5 views
0

ServerType型の汎用BindingListを返すメソッドを継承しようとしています。たとえば、のは、以下の私が持っているとしましょう: 汎用戻り値の異なるメソッドを継承する方法

public interface IServer 
{ 

    string IpAddress { get; set; } 
    string Name { get; set; } 
    string HostName { get; set; } 
    string OsVersion { get; set; } 

} 

public class BaseServer : IServer 
{ 
    private string _IpAddress; 
    private string _Name; 
    private string _HostName; 
    private string _OsVersion; 

    public string IpAddress 
    { 
     get { return _IpAddress; } 
     set { _IpAddress = value; } 
    } 

    public string Name 
    { 
     get { return _Name; } 
     set { _Name = value; } 
    } 

    public string HostName 
    { 
     get { return _HostName; } 
     set { _HostName = value; } 
    } 

    public string OsVersion 
    { 
     get { return _OsVersion; } 
     set { _OsVersion = value; } 
    } 
} 

public class ServerTypeA : BaseServer { } 
public class ServerTypeB : BaseServer { } 
public class ServerTypeC : BaseServer { } 

public class ServerTypeList : List<ServerTypeA> 
{ 

    public BindingList<ServerTypeA> ToBindingList() 
    { 
     BindingList<ServerTypeA> myBindingList = new BindingList<ServerTypeA>(); 

     foreach (ServerTypeA item in this.ToList<ServerTypeA>()) 
     { 
      _bl.Add(item); 
     } 

     return _bl; 

    } 
} 

が、私は、各派生サーバ・クラスでそれを繰り返すようにし、それが正しいジェネリック型を使用していなくても、「ToBindingList」方法を行うことができます任意の方法です。

+3

ToBindingList方法は、単にするBindingList にリストに変換されます。これを行うには、リストの簡単な拡張メソッドを書くことができます。それは、Serverクラスまたはあなたのコード内の他のものとは関係ありません。 –

+0

あなたの実装が 'ToBindingList()'実装を繰り返す必要があるように見えません。何か不足していますか? – dasblinkenlight

+0

私はBindingListが必要な他のdeiveクラスを持っています。異なるリポジトリタイプ。だから私はBindingList ToBindingList()のようなことをする必要があります。 – GhostHunterJim

答えて

1

まず、すべてのあなたのコレクションのための基礎リストを作成します。

public class MyListBase<T> : List<T> 
    where T: Server 
{ 
    public BindingList<T> ToBindingList() 
    { 
     BindingList<T> myBindingList = new BindingList<T>(); 
     foreach (T item in this.ToList<T>()) 
      myBindingList.Add(item); 
     return myBindingList; 
    } 
} 

その後から継承するために、このいずれかを使用します。

public class Repositories : MyListBase<Repository> 
{ 
} 
+0

ありがとう!これはうまくいった。私はforeachループを若干変更しましたが、 "リポジトリ"データ型を "T"で置き換えました。 – GhostHunterJim

+0

私の(コピー貼り付け)間違い。私はそれを訂正した。 –

2

最初にofffはList<T>から派生しません。代わりにそれを使用してください(favor composition over inheritance)。

次に、あなたのRepositories級のジェネリックを行います

public class Repository : Server 
{ 

} 

public class Repositories<T> where T: Server 
{ 

    private List<T> theList = new List<T>(); 

    public Repositories<T>(List<T> theList) this.theList = theList; } 

    public BindingList<T> ToBindingList() 
    { 
     BindingList<T> myBindingList = new BindingList<T>(); 

     foreach (Titem in this.theList) 
     { 
      _bl.Add(item); 
     } 

     return _bl; 

    } 
} 

今、あなたはServerから派生する任意のクラスのRepositories -instancesを持つことができます。

関連する問題