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

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

C# と VB.NET の入門サイト

Re[2]: C++/CLIにおけるプロパティ値の参照渡し


(過去ログ 125 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■74740 / inTopicNo.1)  C++/CLIにおけるプロパティ値の参照渡し
  
□投稿者/ ぶなっぷ (20回)-(2015/01/27(Tue) 11:29:43)

分類:[.NET 全般] 

現在、C++/CLIにてコーディングを行っており、
以下のような参照渡しの引数を含む関数を作成しました。

void CTest::Func(int% Arg);

この関数のArg引数に、通常の値型変数を渡すと、関数内でArgの値を変えた際に、
関数の呼び出し側でも値が変わっていることを確認しました。

しかし、Arg引数に以下のようなプロパティ値
property int CTest::Test;
を渡すと、関数から戻ってきてもプロパティ値は変わっていません。

なんとなく理由は予測がつき、
「propertyの値はgetアクセサの返す値であり、値型だと実体でなくコピーに
なってしまうから」
だと思われます。

このようなとき、プロパティ値を渡して、
関数の呼び出し側でも値が変わるようにする手段は存在するのでしょうか?

引用返信 編集キー/
■74742 / inTopicNo.2)  Re[1]: C++/CLIにおけるプロパティ値の参照渡し
□投稿者/ とっちゃん (294回)-(2015/01/27(Tue) 12:00:47)
とっちゃん さんの Web サイト
No74740 (ぶなっぷ さん) に返信
> しかし、Arg引数に以下のようなプロパティ値
> property int CTest::Test;
> を渡すと、関数から戻ってきてもプロパティ値は変わっていません。
>
> なんとなく理由は予測がつき、
> 「propertyの値はgetアクセサの返す値であり、値型だと実体でなくコピーに
> なってしまうから」
> だと思われます。
>
property int Test; は、コンパイルされると

int get_Test();
void set_Test( int value );

という感じのメソッドに展開されます(プロパティは構文上変数のように
見せているだけのもので、実際はメソッドとしてコンパイルされます)

もし、プロパティを利用したいのなら、
void Func( int% Arg ); ではなく
int Func( int Arg ); という形に変更して

Test = Func( Test ); となるように書く形にするとよいと思います。

今までのコードは修正が必要ですが、この形にしておけば、
C# や VB などほかの Managed な言語との連携も不自由せずに済むと思います。

引用返信 編集キー/
■74744 / inTopicNo.3)  Re[2]: C++/CLIにおけるプロパティ値の参照渡し
□投稿者/ ぶなっぷ (21回)-(2015/01/27(Tue) 13:03:26)
とっちゃん、ありがとうございます。

やはり、そうですか。
複数のプロパティをin/out引数にしたいので、あきらめて、
プロパティを含むクラスそのものを引数で渡すようにします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -