- ベストアンサー
C#でのインスタンスの参照渡しに関する問題
- C#のプログラムで、クラスAのインスタンスを参照渡しして使いたい場合、メソッドBの引数にインスタンスを渡す方法があります。
- ただし、起動時に作られたクラスAのインスタンスとは別のインスタンスが生成されることに注意が必要です。
- クラスBのDLL内でクラスAのメソッドを呼び出すためには、メソッドBの引数にインスタンスを渡す必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>ボタン2でも同じように表示されているウェブブラウザにGoogleを表示させたいです。どのような方法があるでしょうか? 「void Form1::ウェブブラウザ(string URL)」を使ってという事なら public void DLL関数2(Form1 form1) { form1.ウェブブラウザ("http://google.com"); } にして、 item1.DLL関数2(this); と、とすればいいだけだけど(interfaceは適切に変更してるとしてください)
その他の回答 (2)
- wormhole
- ベストアンサー率28% (1626/5665)
何か意味不明なC#もどき言語が書かれているので、こちらとしては説明が面倒なんですけど・・・ >これは、a.メソッドAは、その上のA a = new A();でつくられた新しいインスタンスのなかで処理がされていて起動時につくられたクラスAのインスタンスとは別のものになっているからだと思うのですが、まちがいないでしょうか? >メソッドA(){ > ウェブブラウザA.Navigate(URL); > ここで書かれている「ウェブブラウザA」というのがクラスAのインスタンス変数なら、それであっています。 >この処理を成功させたい場合、起動時に作られたクラスAのインスタンスをメソッドBの引数に参照渡しですれば、 クラスBのインスタンスメソッドBを呼び出すとき、起動時に作成したクラスAのインスタンスのウェブブラウザA(に入っているもの)を渡してるんじゃないんですか? そのウェブブラウザA(には入っているもの)はWebBrowserクラスのインスタンスではないの? 変数という入れ物とインスタンスを区別できてなさそうな。
補足
返信遅くなってしまって申し訳ありません。 私の説明不足のようなので問題の部分のプログラムだけを抜き出したののを作ってみました。 http://1drv.ms/1krjNRG 省略ているためボタンが直接Form1にありますが、MDIの子フォームに表示させる予定です。 ボタン2でも同じように表示されているウェブブラウザにGoogleを表示させたいです。どのような方法があるでしょうか?
- hitomura
- ベストアンサー率48% (325/664)
以下の点、補足説明をお願いします。 「クラスAの方で宣言しているa.メソッドAは失敗します」とありますが、それはコンパイルエラーでしょうか、それとも実行時にエラー/例外が発生するのでしょうか。 また、失敗と判断するに至ったメッセージの類があれば、それをそのままの文で(できればメッセージをコピペで)呈示願います。
補足
失敗というか、変化が起こりません。実行はされているのですがモニタに表示されているウェブブラウザAには何の変化も起こらないという感じです。
お礼
おかげでできました。ありがとうございます。