DOBON.NETプログラミング掲示板過去ログ
クラスの値渡しは不可能?
題名: クラスの値渡しは不可能?
著者: yhh
日時: 2005/03/22 16:45:14
ID: 9992
この記事の返信元:
(なし)
この記事への返信:
[9996]
Re[1]: クラスの値渡しは不可能?
ant
2005/03/22 17:51:55
[9997]
Re[1]: クラスの値渡しは不可能?
魔界の仮面弁士
2005/03/22 18:00:57
ツリーを表示
環境/言語:[Win2000 VS2003 C# ウィンドウズアプリ]
分類:[.NET]
かなり初心者な質問で申し訳ありません。
C#のユーザー定義クラスは参照型だそうですが、
VBで言うByValみたいなことはC#では不可能でしょうか。
MyClass data = new MyClass();
MyClass tmp = new MyClass();
tmp = data;
本当のデータはdataに入っています。
tmpの内容を画面に表示して編集作業を行い、
OKボタンが押されたらtmpをdataにコピー、
CANCELボタンが押されたらtmpを無視する。
みたいなことをしたいだけなのですが、
tmp = dataが参照渡しなので出来ません。
この場合どのようにすべきなのでしょうか。
よろしくお願いします。
また、メンバ変数の値を一個づつコピーすることや、
構造体を使うことは避けたいです。
題名: Re[1]: クラスの値渡しは不可能?
著者: ant
URL:
http://ant0x.udap.jp/
日時: 2005/03/22 17:51:55
ID: 9996
この記事の返信元:
[9992]
クラスの値渡しは不可能?
yhh
2005/03/22 16:45:14
この記事への返信:
[10017]
Re[2]: クラスの値渡しは不可能?
yhh
2005/03/23 10:48:55
[解決]
ツリーを表示
> C#のユーザー定義クラスは参照型だそうですが、
> VBで言うByValみたいなことはC#では不可能でしょうか。
> 本当のデータはdataに入っています。
> tmpの内容を画面に表示して編集作業を行い、
> OKボタンが押されたらtmpをdataにコピー、
> CANCELボタンが押されたらtmpを無視する。
> みたいなことをしたいだけなのですが、
> tmp = dataが参照渡しなので出来ません。
全体はよくわからないので、本当にオブジェクトのコピーが必要
なのかどうかわかりませんが、オブジェクトのコピーを
作るには、ICloneableを実装させて、MemberwiseCloneを
使うといいと思います。ただ、DeepCopyを行う際は
再帰的にならないように注意しなければならないと思います。
#
題名: Re[1]: クラスの値渡しは不可能?
著者: 魔界の仮面弁士
日時: 2005/03/22 18:00:57
ID: 9997
この記事の返信元:
[9992]
クラスの値渡しは不可能?
yhh
2005/03/22 16:45:14
この記事への返信:
(なし)
ツリーを表示
> C#のユーザー定義クラスは参照型だそうですが、
> VBで言うByValみたいなことはC#では不可能でしょうか。
Visual Basic でいうところの
《宣言》
Public Shared Sub ByValVB(ByVal X As ArrayList)
Public Shared Sub ByRefVB(ByRef X As ArrayList)
《呼出》
MyVBClass.ByValVB(AL1)
MyVBClass.ByRefVB(AL2)
は、C♯では、
《宣言》
public static void ByValCS( ArrayList X)
public static void ByRefCS(ref ArrayList X)
《呼出》
MyCSClass.ByValCS( AL1);
MyCSClass.ByRefCS(ref AL2);
になりますね。
> OKボタンが押されたらtmpをdataにコピー、
コピーの実装例として。
[.NETでいきまっしょい!] - [IClonableとIDisposable]
http://santamartadotnet.hp.infoseek.co.jp/documents/vbdotnet/clonableanddisposable.html
題名: Re[2]: クラスの値渡しは不可能?
著者: yhh
日時: 2005/03/23 10:48:55
ID: 10017
この記事の返信元:
[9996]
Re[1]: クラスの値渡しは不可能?
ant
2005/03/22 17:51:55
この記事への返信:
(なし)
ツリーを表示
う〜ん、コピーするだけで結構ややこしいんですね。
ICloneableを調べてるんですが、
使いこなすのにちょっと練習してきますので、
とりあえずここで解決としておきます。
ありがとうございました。
解決済み!
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
かなり初心者な質問で申し訳ありません。
C#のユーザー定義クラスは参照型だそうですが、
VBで言うByValみたいなことはC#では不可能でしょうか。
MyClass data = new MyClass();
MyClass tmp = new MyClass();
tmp = data;
本当のデータはdataに入っています。
tmpの内容を画面に表示して編集作業を行い、
OKボタンが押されたらtmpをdataにコピー、
CANCELボタンが押されたらtmpを無視する。
みたいなことをしたいだけなのですが、
tmp = dataが参照渡しなので出来ません。
この場合どのようにすべきなのでしょうか。
よろしくお願いします。
また、メンバ変数の値を一個づつコピーすることや、
構造体を使うことは避けたいです。