Подтвердить что ты не робот

Перегрузка = оператор в С#

Хорошо, я знаю, что это невозможно, но это был лучший способ сформулировать название вопроса. Проблема в том, что я пытаюсь использовать собственный собственный класс вместо float (для детерминированного моделирования), и я хочу, чтобы синтаксис был как можно ближе. Поэтому я, конечно, хочу написать что-то вроде

FixedPoint myNumber = 0.5f;

Возможно ли это?

4b9b3361

Ответ 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;