2011-07-19 11 views
5

拡張メソッドを使用すると、任意のタイプに簡単にメソッドを追加できます。明らかにこれは将来のバージョンの.netで拡張メソッドを呼び出すことができなくなる可能性があります(たとえば、タイプには拡張メソッドと同じシグネチャを持つメソッドが含まれています)。拡張メソッドforward互換

これは問題になりますか?

もしそうなら、私はこれに対処し、コードの変更を最小限に抑えるように拡張メソッドを設計する必要がありますか?

+0

もしあなたが心配しているのであれば、1つの解決策は拡張メソッドを使用しないことです。 ';)' 拡張しているクラスから継承し、その方法を追加することができます。後で追加される新しいメソッドを隠しているという警告が表示されます。あるいは、静的メソッドから 'this'パラメータ修飾子を削除することもできます。 –

答えて

6

フレームワークは、将来的にあまり変更された場合は、必ず互換性の問題があるでしょう。拡張メソッドと同じ名前の新しいフレームワークメソッドが追加された場合、それらが同じ、または少なくとも非常に類似した機能を持ち、リファクタリングが期限切れになる可能性が非常に高いです。

私は、このリスクのために拡張メソッドの能力が無視できないほど大きすぎると思います。

+0

私は同意します。拡張メソッドを可能な限り明確かつ明快に、簡単に作成します。 – hatchet

0

フレームワークで決して使用されないわかりにくいメソッド名を使用します。

編集 - おそらくあいまいは、最も適切な言葉ではなかった、で代用してください署名の競合を回避しようとすると、意味のあるが、あまり一般的verbage

は本当にの手間を回避する唯一の戦略でありますコードのリワーク(拡張メソッドの機能を保持し、フレームワークのメソッドの定義に単純に変換する必要はないと仮定します)。

+0

私はそれを好きではありません。名前は明確でなければなりません。 –

+0

合意して、意味があるはずですが、私は意味があり、あいまいではなく、相互に排他的である必要はないと思います。シソーラスを引き出し、あまり一般的ではないが明瞭な動詞を使用します。 – roken

+1

もしあなたが心配しているなら、常にRedefineの代わりにext_Redefineのようなプレフィックスを付けることができます。 – Blam

0

唯一可能なことは、独自の拡張メソッドに十分な名前を付けることで、矛盾がないことを100%確信していることです。

はちょうどより創造的になろうと、メソッドの名前にあなたの猫の名前を追加する話ではない:)