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

VB.NETで、親オブジェクトを取得する方

環境/言語:[.NET Framework3.0 / VB]
分類:[.NET]

いつも参考にさせていただいています。

自作クラスで、親オブジェクトを取得するような技って無いですよね?

きっと、無いんだろうなと思いつつ、投稿させていただきました。

以下のようなことを、自作の関数を実装することなく、実現できればと思っています。
何か方法あるのでしょうか?

---------------------------------------------------------
Public Class classA
{

Private mObjB As new classB
Public Property ObjB() As classB
Get
Return mObjB
End Get
Set(ByVal value As classB)
mObjB = value
End Set
End Property

}

Public Class classB
{
Private mData As integer
Public Property Data() As integer
Get
Return mData
End Get
Set(ByVal value As integer)
mData = value
End Set
End Property

public function GetParrentObj As Object
{

' この中で、親オブジェクトを取得したい。
' 下記の@から呼ばれた場合は、objAを取得したい。
' Aから呼ばれた場合は、Nothingでよい。

}
}

Public Class main
{
sub new()
{
Dim objA As new classA
Dim objB As new classB

Dim obj As object = objA.ObjB.GetParrentObj() ' @
Dim obj As object = objB.GetParrentObj() ' A

}
}
---------------------------------------------------------
■No27185に返信(あひるさんの記事)
> {
> }
えぇと、VB で良いのですよね?


> Dim obj As object = objA.ObjB.GetParrentObj()    ' @
> Dim obj As object = objB.GetParrentObj()    ' A
これは
  Dim obj1 As object = objA.ObjB.GetParrentObj()    ' @
  Dim obj2 As object = objB.GetParrentObj()    ' A
という意味でよいですか?


> ' この中で、親オブジェクトを取得したい。
> ' 下記の@から呼ばれた場合は、objAを取得したい。
> ' Aから呼ばれた場合は、Nothingでよい。
ひとつ確認なのですが、
 Dim objA As New classA()
 Dim objB As classB = objA.ObjB
 Dim obj As Object = objB.GetParrentObj()  '☆
という場合、☆ は上記(1)と(2)のどちらにあたるのでしょうか?

もしも (1) に当たるなら、objA のコンストラクタで、
mObjB に何か適当な識別データを割り当てておけば良いと思います。
魔界の仮面弁士さん

早速のコメントありがとうございます。

> これは
> Dim obj1 As object = objA.ObjB.GetParrentObj() ' @
> Dim obj2 As object = objB.GetParrentObj() ' A
> という意味でよいですか?
はい。。そのとおりです。
失礼いたしました。

> もしも (1) に当たるなら、objA のコンストラクタで、
> mObjB に何か適当な識別データを割り当てておけば良いと思います。
お察しのとおり、@に当てはまります。

すいません。私の力不足で、よくイメージできません。
どんなイメージでしょか?
もう少しヒントをいただけると、助かります。

よろしくお願いします。
> 以下のようなことを、自作の関数を実装することなく、実現できればと思っています。
標準機能ではそのようなことは出来ません。classBがclassAから作成されたのか、classBを直接作成したのかを知るにはclassBにそれを分からすための物が必要になり、その内容から判断するメソッドまたはプロパティを作る必要があります。
■No27187に返信(あひるさんの記事)
> どんなイメージでしょか?
> もう少しヒントをいただけると、助かります。

イメージとしてはこんな感じ。
掲示板に直接描いた物なので、元のコードと多少違うかも知れませんが。

Public Class Sample
 Public Shared Sub Main()
  Dim objA As New classA()
  Dim objB As New classB()
  Dim objX As classB = objA.ObjB

  Dim obj1 As Object = objA.ObjB.GetParrentObj()
  Dim obj2 As Object = objB.GetParrentObj()
  Dim obj3 As Object = objX.GetParrentObj()

  Console.WriteLine(TypeName(obj1))
  Console.WriteLine(TypeName(obj2))
  Console.WriteLine(TypeName(obj3))
 End Sub
End Class

Public Class classA
 Private mObjB As New classB(Me)
 Public Property ObjB() As classB
  Get
   Return mObjB
  End Get
  Set(ByVal value As classB)
   mObjB = value
  End Set
 End Property
End Class

Public Class classB
 Private mOwner As Object
 Public Sub New()
  Me.New(Nothing)
 End Sub
 Public Sub New(ByVal owner As Object)
  mOwner = owner
 End Sub
 Public Function GetParrentObj As Object
  Return mOwner
 End Function
End Class

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