0

コレクションをとにバインドしているアプリケーションでDataBindingに使用ObservableCollectionしました。また、条件に基づいてコレクションからオブジェクトを削除する必要があるという要件のため、を使用してなどの機能を実装しました。WPFDataGridsComboBoxesRemoveAllListExtension method

この投稿では、いくつかのメリットを指定してInheritanceいますが、これが追加する必要のある唯一の方法であり、コレクションExtension methodsに別の方法を追加するつもりはないため、私の場合にはあまり具体的ではありません。Extension method

Extension methodこれをそのまま実装したほうがいいのか、それともクラスの継承を考えて追加したほうがいいのか知りたいのですがInstance method

また、上記の投稿では説明されていないため、両者の間にパフォーマンスの違いがあるかどうかを知りたいと思います。

4

3 に答える 3

4

RemoveAll()だけでなくObservableCollectionだけを拡張することを計画している場合は、それをサブクラス化して機能を追加します。RemoveAll()を単なるObservableCollection以外に追加する場合は、代わりにIEnumerableまたは階層内の別の一般的な親をターゲットにすることで、単なるObservableCollection以上を処理する拡張メソッドを作成できます。そのメソッドでは、コレクションがCollectionChangedをサポートしているかどうかをテストし、適切に処理できます。

ここに正しい答えも間違った答えもありません、それはあなたのニーズに合ったものです。

于 2012-07-27T13:51:10.347 に答える
2

1つのメソッドのために、拡張メソッドを使用します。ObservableCollection<T>この場合、カスタムタイプを維持しなくても、コードを引き続き使用できることを意味します。

拡張メソッドは、コンパイル時に静的メソッド呼び出しに要約されるだけなので、継承よりもパフォーマンスが低下することは想像できません。どちらかといえば、それは同じかそれ以上でなければなりません。

通常、個人的な好みが拡張方法の選択を左右します。

于 2012-07-27T13:54:13.560 に答える
1

Extensionmethodを使用すると、インターフェースを拡張でき、その結果、そのインターフェースのすべての実装者が拡張されます。

の拡張メソッドでそれを行いSystem.Collections.IListます。 System.Collections.IListどこでも使用されています...

public class static Extension
{
   public static void RemoveAll(this System.Collections.IList list)
   {
      ...
   }
}

これにより、ほぼすべてのコレクションの実装が拡張されます。

于 2012-07-27T13:52:16.743 に答える