- 題名: クラスモジュールの宣言の仕方?
- 日時: 2005/02/06 16:48:09
- ID: 8948
- この記事の返信元: - (なし)
 
- この記事への返信: - [8949] Re[1]: クラスモジュールの宣言の仕方?2005/02/06 20:18:57
 
- ツリーを表示
> Cls1.Cls2.Test
って時点で、アクセスするのに深いだけで、直接参照したい、という意味になっていると思うのですが。
Class1の子としてでも何でも、直接外側からアクセスすることがあるのであれば、
Class2型の構造が外から見えなければならないので隠蔽はできないと思います。
ほんとうに直接参照したくない、という場合、
Class2のメンバのうちの公開したいものへアクセスできるプロパティを
Class1のメンバに作るという委譲関係を作って、やたら好き勝手アクセスでき
ないようにする必要があるのでは、とは思いますが。
ということで、勝手に曲解して、
「
   (Cls1.Cls2.Testという形で)直接アクセスはしたいけど
   DLL側以外からは新たに好き勝手Newができないようにする
」
という扱いで十分だということであれば、
Class2のFriendコンストラクタを作ることで対応できます。
これで、Class2自体は他で使用できますが、DLLの外からはNewできないようになります。
'●クラス1
Public Class Class1
    Public c2 As New Class2
End Class
'●クラス2
Public Class Class2
    Friend Sub New()
    End Sub
    Public a As String = "aaaaa"
End Class
でも並列だと人間が見た場合微妙なので、以下のようにするといいかもしれません。
Class2型自体がClass1.Class2という位置になって、人間に分かりやすいかな。
機能は一緒です。
'●クラス1
Public Class Class1
    Public c2 As New Class2
    '●クラス2。インナーに。
    Public Class Class2
        Friend Sub New()
    
        End Sub
        Public a As String = "aaaaa"
    End Class
End Class
こんな感じ?
・・・う〜ん、なんとも。
(だめですか?)
分類:[.NET]
下記のような、EXEとDLLの関係で、DLL側のClass2は、EXE側で直接参照できないようにしたいのですが、
EXE側で 「Private C2 As New ClassLibrary.Class2」 とすることが可能でこれを不可にしたいです。
そこで Class2の宣言を、「Friend Class Class2」とすると、今度は Public Cls2 As New Class2 のところで
「'Cls2' は、Public Class 'Class1'の外にある Friend 型を公開できません。」とエラーなってしまいます。
http://dobon.net/vb/dotnet/beginner/accessibilitylevel.html ここを読むと、Protected + Friend にすれば
よさそうなのですが、クラスモジュールを Protected では宣言できないみたいです。
要は、Class2はClass1の子というような関係で、EXE側に公開したいのですが...よろしくお願い致します。
[EXE]
Private Cls1 As New ClassLibrary.Class1
Private X As Integer
X = Cls1.Cls2.Test
[DLL]
Namespace ClassLibrary
(Class1)
Public Class Class1
Public Cls2 As New Class2
(Class2)
Public Class Class2
Public Function Test() As Integer