Правильное использование перегрузки и виртуальногоC#

Место общения программистов C#
Ответить
Anonymous
 Правильное использование перегрузки и виртуального

Сообщение Anonymous »

У меня есть два класса: UNumber и Number (который наследуется от UNumber).
Оба используют одно и то же сложение, хотя Number также смотрит на знак чисел.
Я хочу, чтобы добавление Number использовалось, если один из объектов метода сложения является числом.
Мне кажется, что переопределение Метод Add Number используется, если вызывается метод Add переопределяющего члена. (основной номер типа)
Сейчас у меня есть этот код:
UNumber unumber = new();
Number number = new();
number.Add(number);
// Wanted output: "Add Method of Number"
// Result: "Add Method of Number"
number.Add(unumber);
// Wanted output: "Add Method of Number"
// Result: "Add Method of Number"
unumber.Add(number);
// Wanted output: "Add Method of Number"
// Result: "Add Method of UNumber"
// The whole issue lies here. The simple Add Method of UNumber gets called
// instead of the complex Add Method of Number which works fine for UNumbers and Numbers
unumber.Add(unumber);
// Wanted output: "Add Method of UNumber"
// Result: "Add Method of UNumber"
UNumber1 unumber2 = number;
number.Add(number);
// Result: "Add Method of Number"

class UNumber
{
public uint value;
public UNumber(uint numberin = 0)
{
value = numberin;
}
public virtual void Add(UNumber numberin)
{
value += numberin.value;
Console.WriteLine("Add Method of UNumber");
}
}

class Number : UNumber
{
public bool positive;
public Number(uint numberin = 0, bool positivein = true)
{
value = numberin;
positive = positivein;
}
public override void Add(UNumber numberin)
{
// Cannot cast object as this throws an error,
// I know better workarounds but no neat method to solve this.
Add(new Number(numberin.value));
}

public void Add(Number numberin)
{
uint add1 = value;
uint add2 = numberin.value;
if (positive != numberin.positive)
{
if (value < numberin.value)
{
value = numberin.value - value;
}
else
{
value -= numberin.value;
}
positive = !positive;
}
else
{
value += numberin.value;
}
Console.WriteLine("Add Method of Number");
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»