tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルオブジェクトの代入
記事No6623
投稿日: 2007/12/07(Fri) 13:46
投稿者mar
下記コードを実行すると p1,p2どちらもnameが"Joe"になってしまいます。
p1.name = "Mar"
p2.name = "Joe"
にするにはどうしたらよいのでしょうか?

==== Code ====
Private Class Data
    name as string
    age as integer
End Class

Private p1 as Data
Private p2 as Data

Sub Main
    dim dat As New Data
    dat.name = "Mar"
    dat.age = 19
    p1 = dat
    p2 = dat
    p2.name = "Joe"
End Sub

[ツリー表示へ]
タイトルRe: オブジェクトの代入
記事No6625
投稿日: 2007/12/07(Fri) 15:15
投稿者YuO
> 下記コードを実行すると p1,p2どちらもnameが"Joe"になってしまいます。
> p1.name = "Mar"
> p2.name = "Joe"
> にするにはどうしたらよいのでしょうか?

p1とp2に別のインスタンスを代入するようにすればよいです。

[ツリー表示へ]
タイトルRe^2: オブジェクトの代入
記事No6628
投稿日: 2007/12/07(Fri) 16:40
投稿者mar
> p1とp2に別のインスタンスを代入するようにすればよいです。

実際にはDataクラスはたくさんのデータを保持しており、その一部を変更して新しいオブジェクトとして使いたいのです。
インスタンスをコピーする方法はどうすればよいのでしょうか?

[ツリー表示へ]
タイトルRe^3: オブジェクトの代入
記事No6633
投稿日: 2007/12/07(Fri) 17:38
投稿者YuO
> > p1とp2に別のインスタンスを代入するようにすればよいです。
> 実際にはDataクラスはたくさんのデータを保持しており、その一部を変更して新しいオブジェクトとして使いたいのです。
> インスタンスをコピーする方法はどうすればよいのでしょうか?

基本は一個一個代入することになります。
浅いコピーでよいのであれば,Object.MemberwiseCloneでコピー出来ます。
# オブジェクトのコピーというのは一般に非常にややこしい話です。

[ツリー表示へ]
タイトルRe^4: オブジェクトの代入
記事No6634
投稿日: 2007/12/07(Fri) 18:19
投稿者mar
> 基本は一個一個代入することになります。
> 浅いコピーでよいのであれば,Object.MemberwiseCloneでコピー出来ます。
> # オブジェクトのコピーというのは一般に非常にややこしい話です。
YuOさん ありがとうございます。
ややこしそうなので、DataクラスにClone関数を作って1個づつ代入するようにします。

[ツリー表示へ]