2011-12-18 6 views
1

私はメインフォームを持っています。ユーザーがボタンをクリックすると、バルーンチップが表示されます。バルーンチップは、BalloonTipクラスからメインフォームクラス内でインスタンス化されたオブジェクトです。私は設定のための2番目のフォームを持っています。ユーザーが設定フォームで何かをクリックすると、バルーンの先端も同様に発生します。私は現在、メインクラスとSettingsFormクラスでインスタンス化されたballoontipオブジェクトを持っています。私の2つの質問は次のとおりです。2つの異なるクラスからオブジェクトを2回作成するのは悪いですか?

  1. このような状況に対処する適切な方法はありますか?
  2. 各クラスに1つずつオブジェクトを2つ作成すると、オブジェクトの名前が同じであれば(つまりオブジェクトバラン)、コンパイラに曖昧さが生じますか?
+2

クラスの複数のインスタンスを持つことに問題はありません。 –

+0

なぜ最初にサーバー側で作成されていますか? – lucifurious

+0

スコープで区切られている限り、同じ名前を持つ2つの変数を持つ問題はありません。 – Patrick

答えて

3

オブジェクトをインスタンス化するとき、これは常に特定のスコープ内にあります。例えばので

public void DoSomething() 
{ 
    BalloonTip b = new BalloonTip(); 

    DoSomethingElse(); 
} 

public void DoSomethingElse() 
{ 
    BalloonTip b = new BalloonTip(); 
} 

はあなたにBalloonTipの2つの異なるインスタンス、両方が「B」と呼ばれるが、彼らは両方とも、彼らが宣言された関数のスコープ内でのみ有効です与えるだろう。

複数のオブジェクトをインスタンス化できる青写真としてクラス定義が表示されます。 1つのスコープで複数のインスタンスを持つことはできますが、名前は異なる必要があります。

スコープが重複しない場合は、同じ名前を使用して別のインスタンスを指すことができます。

また、別のメソッドにインスタンスを渡すこともできます。その関数では、別の名前でインスタンスを参照できます。

public void DoSomething() 
{ 
    BalloonTip b = new BalloonTip(); 

    DoSomethingElse(b); 
} 

public void DoSomethingElse(BalloonTip c) 
{ 
    // c points to the same instance as b in the previous function 
} 
関連する問題