类和方法

时间:2012-02-22 15:29:33

标签: c#

我正在使用C#中的类和覆盖方法开发一个项目。我还是新手并且学习。我有两节课。一个叫CalculateValues。那个是你可以添加两个数字的地方。然后在我的下一堂课上,它正在成倍增加。这可能听起来很傻,但我试图将代码放在添加按钮的位置,一个人可以点击它添加两个数字并将结果输出到MessageBox。这是我添加类的代码:

class CalculateValues
{
    private int _num1;
    private int _num2;

    public int Add(int _num1, int _num2)
    {
        return _num1 + _num2;
    }

    public override int Calculate()
    {
        return _num1 + _num2;
    } 
}

现在我正在考虑的代码就像这样

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

但它不起作用。我试图理解我做错了什么,或者我必须写错了。

这就是我要做的事情,所以不要混淆创建一个名为calculateValues.cs的类,在其中创建2个私有变量num1和num2。然后创建与num1和num2对应的公共属性。然后创建一个名为calculate的公共可覆盖方法,将这两个变量一起添加并返回结果。

接下来我创建一个名为multiplyvalues.cs的类。在这个类中,我试图覆盖计算方法,以便它乘以数字而不是添加它们。接下来,我必须在每个按钮后面添加一个代码,该代码将添加和乘以数字并将其输出到消息框中。

4 个答案:

答案 0 :(得分:7)

我怀疑你得到的错误是“你试图覆盖的方法在基类中不存在。”

您的CalculateValues方法直接来自System.Object,它没有虚拟或抽象的Calculate方法,因此无法覆盖。目前还不清楚你尝试使用override实现什么,但这里没有多态...你是不是要为CalculateValues指定一个基类?

答案 1 :(得分:1)

覆盖不会覆盖类中的方法(您似乎正在尝试使用Add(...)Calculate()方法。它是覆盖基类中的方法,在您的情况下,就是System.Object,它不会有该方法并导致编译错误。

如果您正在寻找Add的静态方法,那么您可以执行此操作并移除override中的Calculate()并分配num1和{{1}构造函数/ setter中的值。

答案 2 :(得分:0)

您可以尝试 tp执行以下操作:

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

}

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


public class Multiplier : IntCalculator
{
   public override int Calculate()
   {
        return  //multiply all values;
   }
}

像这样的东西。这只是一个探索的想法。

答案 3 :(得分:0)

如果要创建不同的计算器,可以从抽象基类派生它们

abstract class Calculator
{
    protected int _num1;
    protected int _num2;

    public Calculator(int num1, int num2)
    {
        _num1 = num1;
        _num2 = num2;
    }

    public abstract int Calculate();
}

在派生类中,您必须实现抽象方法Calculate

class AddingCalculator : Calculator
{
    public AddingCalculator(int num1, int num2)
        : base(num1, num2)
    {
    }

    public override int Calculate()
    {
        return _num1 + _num2;
    }
}

class SubtractingCalculator : Calculator
{
    public SubtractingCalculator(int num1, int num2)
        : base(num1, num2)
    {
    }

    public override int Calculate()
    {
        return _num1 - _num2;
    }
}

您可以使用这样的计算器

Calculator calculator;

calculator = new AddingCalculator(5, 7);
Console.WriteLine(calculator.Calculate());

calculator = new SubtractingCalculator(5, 7);
Console.WriteLine(calculator.Calculate());

注意:无法实例化抽象类,即无法编写

var calculator = new Calculator(); // Not allowed!

代码......

: base(num1, num2)

...在派生类的构造函数中调用基类的构造函数。