C# 类和方法
我正在从事一个项目,该项目使用C#中的类和重写方法。我对它和学习仍然是新手。我有两节课。其中一个叫做C# 类和方法,c#,C#,我正在从事一个项目,该项目使用C#中的类和重写方法。我对它和学习仍然是新手。我有两节课。其中一个叫做CalculateValues。这是你可以加两个数字的地方。然后在我的下一节课上,它是乘法。这听起来可能有点傻,但我正在试图找出代码,人们可以在“添加”按钮上单击它,将两个数字相加,并将结果输出到消息框中。这是我的add类的代码: class CalculateValues { private int _num1; private int _num2; public in
CalculateValues
。这是你可以加两个数字的地方。然后在我的下一节课上,它是乘法。这听起来可能有点傻,但我正在试图找出代码,人们可以在“添加”按钮上单击它,将两个数字相加,并将结果输出到消息框中。这是我的add类的代码:
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的类,创建两个私有变量num1和num2。然后创建与num1和num2相对应的公共属性。然后创建一个名为calculate的公共可重写方法,将这两个变量相加并返回结果
接下来,我创建一个名为multiplyvalues.cs的类。在这个类中,我试图重写calculate方法,以便它将数字相乘,而不是相加。接下来,我必须在每个按钮后面添加一个代码,该代码将对数字进行加法和乘法,并将其输出到messagebox中。我怀疑您遇到了一个错误,即“您试图覆盖的方法在基类中不存在。”
您的CalculateValues
方法直接派生自System.Object
,该对象没有虚拟或抽象的Calculate
方法,因此无需重写。使用覆盖
,您试图实现什么还不清楚,但这里没有多态性。。。您的意思是为CalculateValues
指定基类吗?覆盖不会覆盖类中的方法(似乎您正在尝试使用Add(…)
和Calculate()
方法)。它是重写基类中的方法,在您的例子中,就是System.Object
,它没有该方法并导致编译错误
如果您正在为Add
寻找一个静态方法,那么您可以这样做并删除Calculate()
中的覆盖
,并在构造函数/设置器中分配num1
和num2
值。您可以尝试执行以下操作:
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;
}
}
公共抽象类IntCalculator
{
受保护列表值=新列表();
public void AddValue(int值){values.Add(value);}
公共抽象int Calculate();
}
公共类加法器:IntCalculator
{
公共覆盖int计算()
{
返回值.Sum(x=>x);
}
}
公共类乘数:IntCalculator
{
公共覆盖int计算()
{
返回//将所有值相乘;
}
}
像这样的。这只是一个探索的想法。如果您想创建不同的计算器,可以从抽象基类派生它们
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)
。。。在中,派生类的构造函数调用基类的构造函数。“但它不起作用。”-这永远不足以描述问题。请阅读并编辑您的问题。让我猜猜,它没有编译?首先,什么不起作用?其次,您的Calculate()
方法被声明为重写方法,因此包含其对应项的基类在哪里?如果文本框中的文本不是数字(无法解析为整数),您将从int.Parse中得到一个异常。改为使用int.TryParse并检查返回值。根据您今天早些时候发表的帖子判断,我将假设它肯定不会覆盖您的目标。它用于更高级的OOP原则,称为多态性。我觉得会有一个简单的解决办法——你只需要问一个正确的问题,这个问题应该能解释你在这里想要实现什么。