重複の可能性:
拡張メソッドのどのような利点を見つけましたか?
わかりました、まず第一に、これは物議をかもすように聞こえますが、対立するつもりはありません。私は純粋な好奇心から真剣な質問をしています (あるいは困惑という言葉の方が適切かもしれません)。
拡張メソッドが .NET に導入されたのはなぜですか? 見栄えを良くすること以外に、それらはどのような利点を提供しますか (「いい」とは、「インスタンスメソッドのように見える」ことを意味します)。
私にとって、次のような拡張メソッドを使用するコード:
Thing initial = GetThing();
Thing manipulated = initial.SomeExtensionMethod();
SomeExtensionMethod
は、が のインスタンス メンバーであることを暗示しているため、誤解を招く可能性があります。これは、(1)がおそらく効率的に実装Thing
されていると開発者を誤解させます (少なくとも直感として... あなたはそれを否定するかもしれませんが、私は間違いなくこれを観察しました) 。 SomeExtensionMethod
(2)実際にはクラスの一部のSomeExtensionMethod
ように見えるので、将来のある時点で改訂されたとしても、確かに有効なままです(作者が自分が何をしているのかを知っている限り).Thing
Thing
Thing
しかし実際には、拡張メソッドは、保護されたメンバーや、拡張しているクラスの内部動作にアクセスできないため、他の静的メソッドと同じように破損する傾向があります。
上記が簡単に次のようになることは誰もが知っています。
Thing initial = GetThing();
Thing manipulated = SomeNonExtensionMethod(initial);
私には、正直なところ、より良い言葉がないため、これはもっと多くのように思えます。
私は何が欠けていますか?拡張メソッドが存在する理由