DOBON.NET DOBON.NETプログラミング掲示板過去ログ

内部クラス(インナークラス)インスタンスについて

分類:[.NET]

いつも、こちらのサイトで勉強させて頂いております。
VB歴は一年にも満たない初心者です。

同一プロジェクト内で、1つの共通インスタンスから、別のインスタンスを作成する方法を探しています。

具体的には次の通りです。(簡略化して書いてあります。)

Class Test1



Class Test2
End Class


Class Test3
End Class


Class Test4
End Class



End Class

とあった場合に、Test1のインスタンスt1を作成し、t1の情報をもったTest2のインスタンスt2、Test3のインスタンスt3、Test4のインスタンスt4を作成したいと考えています。

VBではそのような事は可能でしょうか?
色々と探した結果、javaでの参考サイトしか発見できませんでした。
URLはイメージしていた方法をjavaで実現する方法が記載されたサイトです。
> 具体的には次の通りです。(簡略化して書いてあります。)
簡略化しすぎて具体性を感じられないのですが。
明らかにされた情報だけでは内部クラスにする必然性は感じられません。単に Test2-4 のコンストラクタに Test1 を引数として受け取るようにすればいいだけのように見受けられます。
■No27705に返信(ビギナーTankさんの記事)

Class1は
Dim t1 as Class1
t1 = new Class1()

> t1の情報をもったTest2のインスタンスt2
どういう風にClass2でClass1の情報を持つかによります。
(派生なのかClass1のインスタンスを持つメンバとして保持するのか)

インナークラスのインスタンス作成は
Class1のブロック内なら
Dim t2 as Class2
t2 = new Class2()

Class1のブロック外なら
Dim t2 as Class1.Class2
t2 = new Class1.Class2()

また変数の定義はClass変数ならprivate、外部に公開するならFriendとかPublicとかにする必要があります
Private t2 as Class1.Class2
Friend t2 as Class1.Class2
Public t2 as Class1.Class2
■No27706に返信(Hongliangさんの記事)
>>具体的には次の通りです。(簡略化して書いてあります。)
> 簡略化しすぎて具体性を感じられないのですが。
> 明らかにされた情報だけでは内部クラスにする必然性は感じられません。単に Test2-4 のコンストラクタに Test1 を引数として受け取るようにすればいいだけのように見受けられます。

Test2からTest1のprivateなメンバにアクセスする必要があります。
Test1のインスタンスを引数で渡しても不可能(のはず)なのでTest1経由の方法を探しています。
■No27707に返信(shuさんの記事)
> ■No27705に返信(ビギナーTankさんの記事)
>
> Class1は
> Dim t1 as Class1
> t1 = new Class1()
>
>>t1の情報をもったTest2のインスタンスt2
> どういう風にClass2でClass1の情報を持つかによります。
> (派生なのかClass1のインスタンスを持つメンバとして保持するのか)

派生とは違い、Test1がその他のクラスを包括します。
Class1のインスタンスを持つメンバとして保持するのか、というのはどういうことでしょうか。
2010/11/30(Tue) 00:44:38 編集(投稿者)

■No27709に返信(ビギナーTankさんの記事)

いまいち何をしたいのか分からないですが、
以下のコードは普通に実行出来ます。
これがヒントになるといいのですが。
Class1のprivateにアクセスするのが気持ち悪ければpublic propertyで
公開するといいでしょう。

'---> どこかに記述
Dim ts1 as new Test1(5)
Dim ts2 as new Test1.Test2(ts1)

ts2.MethodT2()  'MethodT2のintTs1FTest1 に5が設定される
'<-- 

   '--- Tes1, Test1.Test2の宣言
   Public Class Test1
        Private m_intFTest1 As Integer

        Public Sub New(ByVal FTest1 As Integer)
            m_intFTest1 = FTest1
        End Sub

        Public Class Test2
            Private m_ts1 As Test1
            Public Sub New(ByVal t1 As Test1)
                m_ts1 = t1
            End Sub

            Public Sub MethodT2()
                Dim intTs1FTest1 As Integer = m_ts1.m_intFTest1
            End Sub
        End Class

    End Class
■No27711に返信(shuさんの記事)
> 2010/11/30(Tue) 00:44:38 編集(投稿者)
>
> ■No27709に返信(ビギナーTankさんの記事)
>
> いまいち何をしたいのか分からないですが、
> 以下のコードは普通に実行出来ます。
> これがヒントになるといいのですが。
> Class1のprivateにアクセスするのが気持ち悪ければpublic propertyで
> 公開するといいでしょう。
>

やはり引数で対応する事に致しました。
どうもありがとうございました。

DOBON.NET | プログラミング道 | プログラミング掲示板