我正在使用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的类。在这个类中,我试图覆盖计算方法,以便它乘以数字而不是添加它们。接下来,我必须在每个按钮后面添加一个代码,该代码将添加和乘以数字并将其输出到消息框中。
答案 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)
...在派生类的构造函数中调用基类的构造函数。