読者です 読者をやめる 読者になる 読者になる

雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

VB 9.0 が拡張メソッドを利用してインスタンスを差しかえてしまえる件について

VB(.NET)

上記記事のコメント欄で 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 ッテヤッパリコワイデス。