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

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

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

Re[3]: 参照渡しした変数への代入


(過去ログ 82 を表示中)

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

■48690 / inTopicNo.1)  参照渡しした変数への代入
  
□投稿者/ asd (1回)-(2010/04/12(Mon) 16:23:13)

分類:[C#] 

windowsフォームアプリケーションの質問です。

public partial class Form1 : Form
{
public Form1(ref string str)
{
InitializeComponent();
str="aaa"; //処理Aとします。
}
private void button1_Click(object sender, EventArgs e)
{
      //B
}
}

処理AをBの場所で行うにはどうすればいいのでしょうか?
よろしくお願いします。

引用返信 編集キー/
■48691 / inTopicNo.2)  Re[1]: 参照渡しした変数への代入
□投稿者/ nori (96回)-(2010/04/12(Mon) 16:32:48)
質問の意味はまったく理解していないが
処理Aを関数にして、Bの部分で処理Aを呼べば良いのでは?

# 何が問題で何を行いたいのか、もう少し詳しく書く事をお勧めします。
引用返信 編集キー/
■48692 / inTopicNo.3)  Re[2]: 参照渡しした変数への代入
□投稿者/ asd (2回)-(2010/04/12(Mon) 16:40:40)
No48691 (nori さん) に返信

ご返信ありがとうございます。

変数strへの代入をどの場所でもしたいのですが
Bの場所で「str="aaa"; 」と記述しても
「名前 'str' は現在のコンテキスト内に存在しません。」と言われてしまいます。
現在の状態ですと処理Aの場所でしか変数strを使えないというのはもちろん分かるのですが
その先がわからないのです。
引用返信 編集キー/
■48693 / inTopicNo.4)  Re[2]: 参照渡しした変数への代入
□投稿者/ 囚人 (495回)-(2010/04/12(Mon) 16:42:19)
そういう方法ないんじゃないかなあ。値型とStringでは難しいかも。
参照渡しなんて使わなくてよいように設計すべきじゃないですかね。
引数 str を参照型(普通のクラス)にラップして渡すとか。

引用返信 編集キー/
■48694 / inTopicNo.5)  Re[3]: 参照渡しした変数への代入
□投稿者/ 囚人 (496回)-(2010/04/12(Mon) 16:44:10)
肝心な事を書いてなかったので追記。

で、ラップしたクラスのインスタンスを渡し、メンバに保持しておき、Bの部分でそれを対象に処理する。
引用返信 編集キー/
■48695 / inTopicNo.6)  Re[3]: 参照渡しした変数への代入
□投稿者/ 774RR (493回)-(2010/04/12(Mon) 16:45:50)
その str って実体が、具体的にどこに存在するの?

なんとなく
・自前のフォーム中に string が存在すべきであって
・コンストラクタでは外部から初期値をもらっているだけ
のような気がしなくもないような・・・
引用返信 編集キー/
■48696 / inTopicNo.7)  Re[4]: 参照渡しした変数への代入
□投稿者/ asd (3回)-(2010/04/12(Mon) 16:50:38)
No48695 (774RR さん) に返信


目についたものを返信させていただきます。
親フォーム(別スレッド)がありまして上記は子フォーム(クラスライブラリ)の中身です。





引用返信 編集キー/
■48697 / inTopicNo.8)  Re[5]: 参照渡しした変数への代入
□投稿者/ asd (4回)-(2010/04/12(Mon) 16:56:47)
No48694 (囚人 さん) に返信



ありがとうございます。
参考にさせていただきます。
引用返信 編集キー/
■48699 / inTopicNo.9)  Re[1]: 参照渡しした変数への代入
□投稿者/ よねKEN (467回)-(2010/04/12(Mon) 17:06:13)
質問文を読みましたが、今やろうとしていることで、最終的に何が実現できればよいのかがよくわかりませでした。
どうやるか?という手段の部分は置いといて、何が実現できればいいのかを明らかにしてもらった方がいいように思います。
(その内容によっては「参照渡しした変数への代入」という手段である必要はないかもしれません)

登場人物としてはForm1、Form1とやりとりする何か(Xとでもしましょう)がありますよね。
で、XからForm1に対して何らかの値を渡して、それに対してForm1で処理してXに結果を戻してやりたいのかな
と思いました。

-- 以降は「登場人物〜」からの下りの理解であっている前提で・・・ --

(1) Xが何者かわかりませんが、XクラスのインスタンスをどこかのタイミングでForm1に渡します。
  → button1_Clickが呼び出される可能性がある時点より前であればいつでもよいでしょう。
   Form1のコンストラクタ、プロパティ、メソッドのいずれかで渡しておき、
   そのXのインスタンスを保持しておきます。

(2) button1_Clickメソッドの処理の中で(1)で保持してあるXのインスタンスに
  対して、”処理A”に当たる内容を実行します。
  → 仮にXにStrプロパティがあるなら、Xのインスタンス.Str = "aaa";で
   Xのインスタンスに処理Aの結果を反映することができます。



引用返信 編集キー/
■48706 / inTopicNo.10)  Re[2]: 参照渡しした変数への代入
□投稿者/ Jitta on the way (603回)-(2010/04/12(Mon) 22:33:17)
No48699 (よねKEN さん) に追加

ウェブ コミュニティでされる質問で、すぐに「答え」がつかない場合、多くは質問で「質問の背景」が説明されていないことが原因です。
最終的に、何がしたいのでしょう?基本的に参照型である C# で、参照型を参照渡しする必要は、ほとんどありません。特に、今回の質問では
> 変数strへの代入をどの場所でもしたいのですが
> Bの場所で「str="aaa"; 」と記述しても
> 「名前 'str' は現在のコンテキスト内に存在しません。」と言われてしまいます。
という事なので、参照渡しはまったく関係ありません。変数のスコープ(参照可能範囲)の問題です。
引用返信 編集キー/
■48720 / inTopicNo.11)  Re[3]: 参照渡しした変数への代入
□投稿者/ みきぬ (858回)-(2010/04/13(Tue) 10:20:44)
やりたいことは、よねKENさんと同じことを考えた。
子フォームが何かのダイアログで、そこで選択なり入力なりした結果を親フォームに反映させたいのかな、と。

で、親フォームからstring変数への参照を渡して、子フォームでその内容を書き換えれば
親フォームにあったstring変数の内容も書き換わるよね、っていうのがスレ主の考えたことなんだと思った。

>>変数strへの代入をどの場所でもしたいのですが
>>Bの場所で「str="aaa"; 」と記述しても
>>「名前 'str' は現在のコンテキスト内に存在しません。」と言われてしまいます。
> という事なので、参照渡しはまったく関係ありません。変数のスコープ(参照可能範囲)の問題です。

スコープのことはスレ主はわかっていると思うよ(根拠は No48692
じゃあどうすればいいか? てのがわからないのかと。


ちなみに私としては(子がモーダルダイアログという前提で)
・子フォームに string 型のプロパティを用意する
・子フォームを開く前に、親フォームは子フォームのプロパティに(初期値として)設定する
・子フォームを閉じた後、親フォームは(DialogResult.OKなら)子フォームのプロパティ値を確認して、
 親フォームにあるstring変数値を書き換える
ほうをお勧めしたい。

おそらく子フォームは別アセンブリになっていると思うし、クラスライブラリにあるダイアログもそういう風になっているし、相互参照しなくてもいいし。

# もし子がモーダルダイアログでなければ、子に変更イベントを追加して、
# 親でそのイベントを処理して書き換える形にするかな。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -