I have two classes: UNumber and Number (which inherits from UNumber).
Both use the same addition, although Number also looks at the sign of the Numbers.
I want that the addition of Number gets used if one of the objects for the addition method is a Number.
It seems to me that the override Add method of Number gets used if the Add method of an overriding member gets called. (underlying Type Number)
I currently have this code:
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");
}
}