>GetStrにとって、こういう呼ばれ方をすることが迷惑、ということ。
確かに迷惑ではありますが,必要な場所では NullReferenceException が発生するわけで,C/C++ の未初期化変数へのアクセスのような悪性の問題ではないと思っています.
ちなみに,個人的な意見ですが,CLI が「this が this のように振る舞う」ということ自体を属性的に定義していなかったのは失敗だと思っています.this は元々特殊引数で,他のメソッド引数を this のように振る舞わせる仕組みは CLI には用意されていません.
このため,拡張メソッドのように「this の様に見える第一引数」のセマンティクスと,従来の this のセマンティクスとが,微妙に異なってしまっています.
例えば値型に定義されたインスタンスメソッドを,拡張メソッドは再現できません.これは CLI 規格が,参照型と値型で this の扱いを変えるためです.拡張メソッドでは値型タイプの this の積み方をどうしても再現できません.
ByRef を利用した拡張メソッドをサポートする VisualBasic はでは,さらにややこしくなります.
VisualBasic では,C# でいうところの ref キーワードを書かないため,
instance.Method()
の instance が ref 渡しということが実際に可能です.そのため,
instanceA.Swap( instanceB )
のようなコードも書けてしまいます.
このあたりの問題については,以下の記事が詳しいです.
http://blogs.msdn.com/vbteam/archive/2007/01/18/extension-methods-part-3.aspx
http://blogs.msdn.com/sreekarc/archive/2007/04/25/extension-methods.aspx