VB6.progamerの話題が時々でますが, はまってもた。
VB6では正常終了するが.netだと落ちる問題。(インスタンスのnew問題です.)
100: dim c as new Class_A
200: c = nothing
300: XYZ(c)
400: :::::end::::::
500: sub XYZ(byref c as Class_A)
600: c.add( "ABC")
700: end sub
(各行の間にはステートメントがありますが,必要な箇所だけ抜粋 : Class_A は add.メソッドを持つ)
コードとしては問題はないのだが,実行時に問題が発生する。
普通の思考だと, 200行で c= nothingして XYZをCallするから,600:行で cは Nothingになっていて, 落ちる...
.しかし, VB6だと,インスタンス化されるので 正常終了する.
ognacとしては,VB6の行儀の悪い言語仕様だと思っている, ご法度にすべき。
VB6では,DIMは宣言文で,実行文への展開はしない.初めて使用されたときに,インスタンス化される.
とすると, 200行の c= nothing の時は, インスタンス化してから,Nothingしてるのかな?
VBの敷居を低くするのと, 言語仕様を曖昧にするのとは別物だと思う。
曖昧な言語仕様が,曖昧なプログラマーを生み,繁殖していったのは,否定しがたいと思う。
曖昧なまま .netに移られても, .net Nativeなプログラマにはなれないと思うが、どうだろう