2012-02-24 11 views
-3

こんにちは皆、私が間違っていることから成し遂げようとしています。クラスを作成しようとしていますが、クラス内でnum1やnum2などの2つのプライベート変数を呼び出しています。次に、num1とnum2に対応するパブリックプロパティを作成します。それから私が作成した後、私は計算と呼ばれるpublic overriableメソッドを作成する必要があり、これは2つの変数を一緒に追加し、結果を返します。次に、私は2つの数字を追加し、結果をmessageboxに出力するボタンにコードを追加する必要がある追加ボタンがあります。私は2つの異なる方法を試して、私はまだそれを取得していません。 ここでは、コード1:C#で計算する

public abstract class CalulateValues 
{ 
    protected List<int> values = new List<int>(); 
    public void AddValue(int value) { values.Add(value); } 
    public abstract int Calculate(); 

} 

public class Add : CalulateValues 
{ 
    public override int Calculate() 
    { 
     return values.Sum(x => x); 
    } 
} 

と、ここで私が試したコード2:

class CalculateValues 
{ 
    private int _num1; 
    private int _num2; 


    public int Num1 
    { 
     get 
     { 
      return _num1; 
     } 
     set 
     { 
      _num1 = value; 
     } 
    } 
    public int Num2 
    { 
     get 
     { 
      return _num2; 
     } 
     set 
     { 
      _num2 = value; 
     } 
    } 
    public virtual int calculate() 
    { 
     return _num1 + _num2; 

    } 
} 

今では、私はこのコードを試してみましたボタンが付属していたとき:

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     CalculateValues myAdd = new CalculateValues(); 
     MulitplyValues Add = new MulitplyValues(); 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

     int total = myAdd.Add(int.Parse(textBox1.Text), int.Parse(textBox2.Text));  
     MessageBox.Show(total.ToString()); 

    } 

私はを私が間違ってやっていることをあまり確かめていないかもしれません。正しいコードをレイアウトしていないかもしれません。

+4

のように計算し、私はあなたのネーミングを固定ことをお勧めしたいです。 'CalulateValues'という名前のクラスと' CalculateValues'という名前のクラスは、 'MulitplyValues'のインスタンスである' Add'という変数を持つのと同様に、*非常に混乱します。 –

+0

Calculate()をどこでも呼び出していないように見えます。 – WraithNath

+1

/スレッド.... [Best Page Ever](http://mindprod.com/jgloss/unmainnaming.html)へのリンク –

答えて

3

myAddをForm2コンストラクタのローカル変数として宣言しました。 button1_Click()

これに加えて、エラーまたは例外が発生していますか?次に、2つのパラメータを受け入れるAddメソッドをどこで宣言しましたか?

+0

私はそれをForm2のフィールドとして追加することを意味すると思います。グローバル変数ではありません。 –

+0

@DavidKemp Form2クラスのコンテキストではグローバルになりますが、Form2クラスの他のメソッドやプロパティからアクセスできるように、Form2のフィールドとして宣言する必要があります。 (私たちは同じ軌道に乗っていると信じています:-)) –

+0

グローバルコンテキストには特別な意味があります。グローバル変数を持てないのでC#で無効です。(パブリック)静的メンバーを使用する必要があります。しかし、はい、私たちは同じトラックにいました。 –

-1

Form2()コンストラクタでのみ初期化しても、コンストラクタの外側でmyAdd変数を宣言する必要があります。

CalculateValuesクラスには「Add」メソッドがありません。行くと、まず、C#のチュートリアルを見て、その変数のスコープの詳細を見て、その後

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     CalculateValues myAdd = new CalculateValues(); 
     MulitplyValues Add = new MulitplyValues(); 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

     int total = myAdd.Calculate(int.Parse(textBox1.Text), int.Parse(textBox2.Text));  
     MessageBox.Show(total.ToString()); 

    } 
+0

myAddはまだ範囲外です –

+0

あなたは正しいです、私はそれを逃した。私は答えを修正した。 –

0
public partial class Form2 : Form 
{ 
    CalculateValues myAdd; 
    public Form2() 
    { 
     InitializeComponent(); 
     myAdd = new CalculateValues(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     int total = myAdd.Add(int.Parse(textBox1.Text), int.Parse(textBox2.Text));  
     MessageBox.Show(total.ToString()); 
    } 
} 

そして: は、代わりにあなたはこのような「Calculate」メソッドを呼び出す必要があります。

0
int total = myAdd.Add(int.Parse(textBox1.Text), int.Parse(textBox2.Text));  

myAddにはAddメソッドがありません。それはAddValueです。そしてCalculateに電話して結果を取得する必要があります。

myAddをコンストラクタ内ではなくメンバ変数として宣言します。

そして、それを試してみてください:あなたのコード内

myAdd.AddValue(int.Parse(textBox1.Text) 
myAdd.AddValue(int.Parse(textBox2.Text);  
int total = myAdd.Calculate(); 
MessageBox.Show(total.ToString()); 

複数のバグ。あなたがメソッドを使用shoudl、メソッドが追加持たない

0

は、まずこの

private void button1_Click(object sender, EventArgs e) 
{ 
    int total = myAdd.Add(int.Parse(textBox1.Text), int.Parse(textBox2.Text));  
    MessageBox.Show(total.ToString()); 
}