2010-12-29 23 views
2

Hey!私はフォームによって完全に制御された小さなボイラーシステムを作りました。しかし、フォームコンポーネントは、ボイラー、ラジエーターなどのクラスの関数を呼び出します。フォームオブジェクトを参照渡しに渡す

すべてのクラスをインスタンス化するための少しのメインクラスがありますが、フォームオブジェクトにこれらのクラスに渡してフォームのコンポーネントにアクセスできるようにする方法はわかりません。

私はフォームオブジェクトを格納するために各クラスでミューテータメソッドを使用する必要がありますか?構文的に正しいのですが、どうしたらいいですか?

ありがとうございました! ; o)

+0

構文が正しくない場合、コンパイルされません。あなたは書道のような他の形容詞を使うことを意味しましたか? –

答えて

1

classにフォームを渡すだけです。プライベート変数に格納して、クラスで後で使用できるようにします。これはデフォルトで参照渡しされます。

+0

特定のフォームタイプを追加する場合があります。 private OvenForm parentForm; Lazlo

+2

ちょうどピカピカです - 参照のa *コピー*が値渡しされます。微妙な(しかし重要な)違いがあります。 –

+0

ありがとう。それは今働いて! ; o) –

1

参照型をメソッドに渡すと、C#(既定)はメソッドへの参照のコピーを渡します。つまり、参照をクラスに渡すと、メソッドにその参照のコピーが渡され、両方のコピーが同じオブジェクトを参照するため、呼び出しサイトとメソッドの両方が同じインスタンスにアクセスできるようになります。私はあなたのドメインオブジェクト(あなたのケースでは、BoilerRadiatorなど)がそれらを消費UI層について知っているアプリケーションを構築し、慎重になり

class Example 
{ 
    static void Main() 
    { 
     string s = "hello, world"; 
     // Here we are passing a copy of the reference 
     // stored in "s" to "Print" 
     Print(s); 
    } 
    static void Print(string str) 
    { 
     // By default, "str" will be assigned the copy of the 
     // reference passed to this method. 
     Console.WriteLine(s); 
    } 
} 

:たとえば

。これらのドメインモデルのいずれかにFormを渡す必要があることがわかったら、おそらく何か間違っているでしょう。あなたが達成しようとしているものの小さな例を私たちに示したなら、あなたはより保守的な解決策を考え出すことができます。

+0

うーん、かなりコードがありますが、概念的にフォームにはボタン、タイマーなどの負荷があり、ボタンはクラスのメソッドを呼び出します。「ラジエーターのボタンをクリックするとフォームの一部ブリード();ボイラーのラジエーター「または」ボタンxを押してオフ()に切り替える;システムが「それは意味をなさない? これが保守可能なオブジェクト指向ソリューションでない場合はどうすればよいですか? –

+0

あなたが説明したことは私にはうまく聞こえます。これらのオブジェクトのいずれかにフォーム自体を渡す必要がある理由は明確ではありません。 –

+0

ええと、それはBoiler.bleed()のケースです。タイマーとプログレスバーをリセットし、テキストを変更する方法とそうでない方法。それは正しいことですか? –