Привет, у меня есть программа ниже, и я новичок в 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. Я не уверен, где я ошибся. Пожалуйста, помогите мне исправить код.
2 ответа
Ваши ошибки:
- Вы создаете новый
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
и устанавливает 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();
}
}
Как я сказал выше, это может быть не совсем версия вашей перегрузки оператора +
, но я написал реализацию этой перегрузки, чтобы увидеть, как она работает. Дополнительную документацию см. здесь .
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
Result
равно0
?