VB 9.0 が拡張メソッドを利用してインスタンスを差しかえてしまえる件について
- 拡張メソッドで ref してみる試み (R.Tanaka.Ichiro's Blog)
上記記事のコメント欄で NyaRuRu さんが拡張メソッドを使って呼出元のインスタンスを null 化してしまう例を書かれていて、ふと思い立って↓こんなテストプログラムを作ってみた。
Imports System.Runtime.CompilerServices Module Mod1 Sub Main() Dim s As A = New B Console.WriteLine(s) s.Trans() Console.WriteLine(s) End Sub <Extension()> _ Public Sub Trans(ByRef value As A) value = New C End Sub End Module Interface A End Interface Class B Implements A End Class Class C Implements A End Class
……フツーにコンパイル通るし。
そして、予想していた通りの出力結果ががが。
B C
拡張メソッド呼んだらオブジェクト換わっちゃいましたよ。ガクガクブルブル。
いやぁ、 VB ッテヤッパリコワイデス。