В первом случае да. Переопределить метод ToString.
public class myObject
{
public string myValue {get; private set;}
public myObject( string tempstring)
{
this.myValue = tempstring.ToUpper();
}
public override string ToString()
{
return myValue;
}
}
Во втором случае вроде. Вы не должны пытаться перегрузить операторы, чтобы предложить неожиданное поведение Создайте метод для выполнения поведения, которое не имеет смысла при чтении кода. То, что вы предлагаете (возвращая int), определенно не должно ожидаться, что я верну int (в основном из-за var, а не строго определенного типа). Использование оператора +
для возврата нового myInt
объекта имело бы смысл. Используя оператор +
, верните int
, а не .
Вы можете перегрузить оператор +
для возврата нового объекта myInt, а затем также добавить неявное приведение к int
. Просто убедитесь, что это имеет смысл, и что оно читаемо.
В классе вы можете использовать:
public static implicit operator int(myInt m)
{
return myValue;
}
public static myInt operator +(myInt left, myInt right)
{
// requires constructor that takes int
return new myInt(left.myValue + right.myValue);
}
Конечно, вы можете пойти прямым путем, но снова использовать его только тогда, когда он делает его более читабельным, а не менее (обратите внимание, точно так же, как операторы методов не могут быть перегружены просто типом возврата, поэтому вам придется выбирать между два).
public static int operator +(myInt left, myInt right)
{
return left.myValue + right.myValue;
}