2

これは .NET4 の Vb ですが、C# でも同じ問題があります。ここでは説明しませんが、インターフェイスを使用する必要があります。

これは機能しますが、インターフェースを使用しません:

Public class PersonList
   Inherits List(of Person)
end class

Dim MyPeople as new PersonList
MyPeople.AddRange(SomeList)

依存性注入を使用してこれらのクラスをテストできるようにするため、IPerson や IPersonList などのインターフェイスを使用する必要があります。

PersonList のインターフェイスを作成すると、AddRange が表示されなくなりました。

インターフェイスを使用した PersonList の新しいバージョン

Public class PersonList
   Inherits List(IPerson)
   Implements IList(Of IPerson)
   Implements IPersonList
end class

Interface for the list:
Public Interface IPersonList
   Inherits IList(Of IPerson)
end interface

AddRange を呼び出そうとするまで、すべてがビルドされ、期待どおりに動作します。

Dim MyPeople as IPersonList = new PersonList
MyPeople.AddRange(SomeList) 'BUILD ERROR AddRange is not a member of IPersonList

おそらくIPersonList、 の実装を持つものから継承する必要がありAddRangeます。ただし、インターフェイスが継承できない のAddRange一部です。List(of T)

では、リスト インターフェイスを公開するにはどうすればよいAddRangeでしょうか。

4

1 に答える 1

1

あなたは出来る:

  1. にキャストしてIPersonListからList(Of IPerson)、を呼び出しますAddRange。これは、すべてのIPersonList実装がから継承する場合にのみ機能するList(Of IPerson)ため、おそらく最良のオプションではありません。
  2. AddRangeの拡張メソッドを作成しますIList(T)
  3. 代わりにループを使用するAddRange
于 2013-03-01T14:46:42.730 に答える