Windows XP SP2 + VB.net2003 SP1 + 最近までの
Microsoft Updateで
下記のようなプログラムを作りました。
VBProjectのデフォルトの名前空間:hoge
Public Class OyaClass
Protected Class NaibuClass
Friend x As Integer --③
End Class
Protected Shared y As New NaibuClass
Public Overridable Sub a()
Dim b As Integer = y.x --①
End Sub
End Class
------------------------------------------------
Public Class KoClass
Inherits OyaClass
Public Overrides Sub a()
Dim b As Integer = y.x --②
End Sub
End Class
とかコーディングしたのですが、①はOKで、②は文法エラー
でした。具体的には「yのxはPrivateなのでだめ」
でした。
#どう見てもFriendです!!
・Visual Basic 言語リファレンスで、
「Friend を使用できるのは、モジュール、名前空間、
またはファイル レベルだけです。」と有りますが、
上記フィールドxはモジュールレベルの変数に違い
無く、Privateにされてしまういわれは無いです。
・それとも、それが甘く、内部のクラスのフィールドxは
モジュールレベル変数とは違うのでしょうか?
・MSオフィシャルな記事では無いですが、Sharedな変数
は名前空間が他とは違う(プロジェクトのデフォルトの
名前空間のHOGEでは無く、クラス名そのものが名前空間)
とかなんとか書いてあった様に思います(?!)が、
本当でしょうか?
・もし本当なら、それが理由で「同じアセンブリ」で、
(.netでは関係ないかも知れないですが)
「同じプロジェクト」なのに、それを参照するクラス
とは名前空間が違うが為に、インスタンスyの中のxは、
Friendの関係からPrivateの関係にされてしまうので
しょうか?
・凡ミスなのでしょうか?
なにかご教示ください。
#なお、③で
# Public x As Integer
#とすれば、意図通りに
#使えました。