C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.37136 の関連記事表示

<< 0 >>
■37136  Re[13]: 参照型の引数にrefをつけるとき
□投稿者/ Azulean -(2009/06/13(Sat) 22:25:48)
    今回のコードという前提条件の下で、結果的に同じであったとしても、それぞれの意味するところは違います。

    No37133 (cio さん) に返信
    > CopyChlid1にデータをコピーしたいのに、これじゃあ結局
    > MainDataClass p = new MainDataClass();
    > Org.CopyData(ref p);
    > p.OutPut();
    > こう書いたのと同じことだということです。

    意味は違います。
    しかし、今のやりたいことと思われる、「CopyDataメソッドでCloneメソッドを用いて作った別のインスタンスに差し替えること」しか考えないのであれば、結果的に同じにはなります。
    入れ物がMainDataClassであればよく、pに何が入っていようと関係がないからです。(pの値は使われずに捨てられるため)

    そもそもの問題として、インスタンスの差し替えが前提であれば、refでなくてoutで良いと思いますし、1つの引数しかoutがないのでれば戻り値でも十分です。


    > >オブジェクトを引数に渡すと「普通は」コピーされる。
    > と囚人さんに教えていただきましたが、これでは引数で行わなれるコピー処理を、自分が変わりに行っているだけですよね?

    ここで「コピー」と書くとややこしいかなぁ。
    MainDataClassはクラスですし、オブジェクト自体がコピーされるのではなく、参照するための入れ物(変数)が別にできて、同じ実体が参照される入れ物が2つできると言うべきだろうか?

    今回のコードでは、入れ物自体が別物になっている点では同じですが、「引数で行われるコピー処理」とは意味は異なります。




    今回やりたかったことは、インスタンスの差し替えだったのかどうかが気にはなります。

    MainDataClassあるいはその派生クラスに対して、あるMainDataClassからのメンバー変数をコピーしたいということであれば、
    MainDataClassにCopyFromインスタンスメソッドでも作って、コピー元のMainDataClassを渡してその中でメンバー変数をコピーすれば良いのでは?
    そうすれば、MainDataClassの派生クラスも同じインスタンスメソッドを持ちますので、内容を同じにすることはできますね。
    また、派生クラスの独自のメンバー変数もフォローしたいのであれば、overrideすれば動作を追加できますし。
記事No.37050 のレス /過去ログ64より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -