2017-10-21 10 views
-3

私は基本的に150個のアクションを含むプログラムを作成しました。それは管理する悪夢となり、友人は行動のグループを別々のクラスに分けておくことを勧めました。
理想的には、Do {1,2,3,4,5}からDo {A,B}までです。ここで、A{1,2,3}で、B{4,5}です。練習する他のクラス/メソッドを使用するクラス

、私は2クラスを仕事にしようとすることを決めた:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
    public void button_Click(object sender, RoutedEventArgs e) 
    { 
     if (checkBox1.IsChecked == true) 
     { 
      checkTrue(); 
     } 
     else 
     { 
      checkFalse(); 
     } 
    } 

    public void checkTrue() 
    { 
     textBox.Text = "checkbox was checked"; 
    } 

    public void checkFalse() 
    { 
     textBox.Text = "unchecked :("; 
    } 
} 

は、どのように私は時に呼び出される新しいクラスとして設定し、それにこれを変更することについては行くだろうか?新クラス「checkBool」を作成する場合 は、私は新しい.csファイルに次のように書いていない:

class checkBool 
{ 
    public void checkTrue() 
    { 
     textBox.Text = "checkbox was checked"; 
    } 

    public void checkFalse() 
    { 
     textBox.Text = "unchecked :("; 
    } 
} 

ただし、テキストボックスはもはや認識されています。この新しいクラスで参照を理解させるにはどうすればよいですか?

答えて

-2

インスタンスでは、それがわからないため、textboxは認識されません。

class checkBool 
{ 
    public void checkTrue(TextBox textBox) 
    { 
     textBox.Text = "checkbox was checked"; 
    } 
    public void checkFalse(TextBox textbox) 
    { 
     textBox.Text = "unchecked :("; 
    } 
} 

ので、ボタンのクリックハンドラは次のようになります:

このように、 checkTrue()checkFalse()オペレーションにパラメータとして textboxを渡して「それが知らせる」ため

つの簡単な方法

public void button_Click(object sender, RoutedEventArgs e) 
{ 
    checkBool cb = new checkBool(); 
    if (checkBox1.IsChecked == true) 
    { 
     cb.checkTrue(textbox); 
    } 
    else 
    { 
     cb.checkFalse(textbox); 
    } 
} 

これを行うことで、クラスcheckBool(今はTextBoxに依存)に依存関係が導入されていることに注意してください。

+0

ありがとう、これは私の質問に完全に答えます。 なぜ依存関係が悪いのか分かりません(または回答から感情を得る)が、私の質問を解決します。 :) –

+0

それはそれが悪いことではなく、それだけであなたがそれらを最小限に抑えたいということです。プロジェクトがますます大きくなるにつれて、部品を修正したり、物を動かしたりする必要があります。依存関係を最小限に保つことは、とりわけそれを容易にします。 – Estanislao

+0

もう一度、 'checkBool'をインスタンス化するのはなぜですか?これは悪い習慣です。 'checkBool'をヘルパーメソッドしか持たない場合は静的にします。 –

関連する問題