Перегрузка = оператор в С#
Хорошо, я знаю, что это невозможно, но это был лучший способ сформулировать название вопроса. Проблема в том, что я пытаюсь использовать собственный собственный класс вместо float (для детерминированного моделирования), и я хочу, чтобы синтаксис был как можно ближе. Поэтому я, конечно, хочу написать что-то вроде
FixedPoint myNumber = 0.5f;
Возможно ли это?
Ответы
Ответ 1
Да, создав неявный оператор приведения типа FixedPoint
, если этот класс был написан вами.
class FixedPoint
{
public static implicit operator FixedPoint(double d)
{
return new FixedPoint(d);
}
}
Если для читателя/кодера не очевидно, что a double
можно преобразовать в FixedPoint
, вы также можете использовать явный тип. Затем вам нужно написать:
FixedPoint fp = (FixedPoint) 3.5;
Ответ 2
Перегрузка implicit
оператор трансляции:
class FixedPoint
{
private readonly float _floatField;
public FixedPoint(float field)
{
_floatField = field;
}
public static implicit operator FixedPoint(float f)
{
return new FixedPoint(f);
}
public static implicit operator float(FixedPoint fp)
{
return fp._floatField;
}
}
Итак, вы можете использовать:
FixedPoint fp = 1;
float f = fp;
Ответ 3
Создайте неявный тип.
Это пример:
<class> instance = new <class>();
float f = instance; // We want to cast instance to float.
public static implicit operator <Predefined Data type> (<Class> instance)
{
//implicit cast logic
return <Predefined Data type>;
}
Ответ 4
Если Implicit не то, что вы хотите в = перегрузка, другой вариант - использовать явный оператор на вашем классе, такой как ниже, который он будет отбрасывать, делая его понятным пользователю:
public static explicit operator FixedPoint(float oc)
{
FixedPoint etc = new FixedPoint();
etc._myValue = oc;
return etc;
}
... usage
FixedPoint myNumber = (FixedPoint)0.5f;