Visual Studio 2010 - 在 C# 中使用运算符重载时结果为 0
本文关键字:重载 运算符 结果 2010 Studio Visual | 更新日期: 2023-09-27 17:57:02
嗨,我有以下程序,我是 C# 的新手,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UnaryOperatorOverLoad
{
public class UnaryOperator
{
private int Number1;
private int Number2;
private int Result;
public UnaryOperator() { }
public UnaryOperator(int number1, int number2)
{
Number1 = number1;
Number2 = number2;
}
public static UnaryOperator operator +(UnaryOperator opr)
{
UnaryOperator obj = new UnaryOperator();
obj.Result = obj.Number1 + obj.Number2;
return obj;
}
public void showdata()
{
Console.WriteLine("The Sum of Two Numbers is : " + Result);
}
}
public class Program
{
static void Main(string[] args)
{
UnaryOperator opr = new UnaryOperator(20, 30);
opr.showdata();
Console.ReadLine();
}
}
}
当我执行代码时,我得到的结果是0。我不确定我哪里出错了。请帮助我纠正代码。
你的错误:
- 您正在运算符重载函数中创建新
UnaryOperator obj = new UnaryOperator();
。所以obj.Number1
和obj.Number2
的值是0
,因为你刚刚创建了obj
实例。 - 您永远不会调用 + 运算符。将
opr = +opr;
语句添加到Main
方法中。
将代码更改为:
public class UnaryOperator
{
private int Number1;
private int Number2;
private int Result;
public UnaryOperator() { }
public UnaryOperator(int number1, int number2)
{
Number1 = number1;
Number2 = number2;
}
public static UnaryOperator operator +(UnaryOperator opr)
{
opr.Result = opr.Number1 + opr.Number2; // Change this line
return opr;
}
public void showdata()
{
Console.WriteLine("The Sum of Two Numbers is : " + Result);
}
}
public class Program
{
static void Main(string[] args)
{
UnaryOperator opr = new UnaryOperator(20, 30);
opr = +opr; // Add this statement
opr.showdata();
Console.ReadLine();
}
}
这行代码
UnaryOperator opr = new UnaryOperator(20, 30);
创建一个新的 UnaryOPerator
objcet,并将Number1
和Number2
相应地设置为 20 和 30。
然后调用 opr.showdata();
,这会将Result
变量的值打印到控制台。但是,由于您尚未执行任何加法,因此变量的值将为默认值 0。这就是你得到0的原因。
旁注:我不明白你为什么要以你的方式超载添加。想要重载两个自定义对象的添加是合理的,例如 UnaryOperator。但是,在我看来,您试图使用您的方式重载添加内容似乎有点奇怪。另外,由于+
运算符有两个操作数,因此您必须像下面这样定义它们(这可能不是您考虑的重载,但这是一般意义上的正确形式):
public static UnaryOperator operator +(UnaryOperator unaryOperator1, UnaryOperator unaryOperator2)
{
return new UnaryOperator(unaryOperator1.Number1+unaryOperator2.Number1,
unaryOperator1.Number2+UnaryOperator2.Number2);
}
为了完成这项工作,您必须将类的定义更改为以下定义:
public class UnaryOperator
{
public int Number1 { get; set; }
public int Number2 { get; set; }
public UnaryOperator(int number1, int number2)
{
Number1 = number1;
Number2 = number2;
}
public static UnaryOperator operator +(UnaryOperator unaryOperator1, UnaryOperator unaryOperator2)
{
return new UnaryOperator(unaryOperator1.Number1+unaryOperator2.Number1,
unaryOperator1.Number2+unaryOperator2.Number2);
}
public void ShowData()
{
Console.WriteLine("Number1: {0}, Number2: {1}", Number1, Number2);
}
}
Main
方法应更改为以下方法:
public class Program
{
static void Main(string[] args)
{
// Declare the first UnaryOperator object.
UnaryOperator opr1 = new UnaryOperator(20, 30);
// Declare the second UnaryOperator object.
UnaryOperator opr2 = new UnaryOperator(10, 40);
// Add them using the overloaded version of the + operator
UnaryOperator result = opr1+opr2;
// Show the results
result.ShowData();
Console.ReadLine();
}
}
正如我上面所说,这可能不完全是您的+
运算符重载的版本,但我编写了此重载的实现以查看它的工作原理。有关更多文档,请查看此处。