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。我不确定我哪里出错了。请帮助我纠正代码。

Visual Studio 2010 - 在 C# 中使用运算符重载时结果为 0

你的错误:

  • 您正在运算符重载函数中创建新UnaryOperator obj = new UnaryOperator();。所以obj.Number1obj.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,并将Number1Number2相应地设置为 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();
     }
}

正如我上面所说,这可能不完全是您的+运算符重载的版本,但我编写了此重载的实现以查看它的工作原理。有关更多文档,请查看此处。