operator - Sobrecarga=operador en C#
method operator c# (4)
OK, sé que es imposible, pero era la mejor manera de formular el título de la pregunta. El problema es que estoy tratando de usar mi propia clase personalizada en lugar de flotar (para simulación determinística) y quiero que la sintaxis sea lo más cercana posible. Entonces, ciertamente quiero poder escribir algo como
FixedPoint myNumber = 0.5f;
¿Es posible?
Crear un tipo implícito de conversión.
Esto es un ejemplo:
<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>;
}
Sí, creando un operador de FixedPoint
tipo implícito para FixedPoint
si usted escribió esta clase.
class FixedPoint
{
public static implicit operator FixedPoint(double d)
{
return new FixedPoint(d);
}
}
Si no es obvio para el lector / codificador que un double
se puede convertir en FixedPoint
, también puede usar un tipo explícito de conversión en FixedPoint
lugar. Entonces tienes que escribir:
FixedPoint fp = (FixedPoint) 3.5;
Si lo implícito no es lo que quiere en = sobrecarga, la otra opción es usar el operador explícito en su clase como el que aparece a continuación, haciéndolo entender por el usuario:
public static explicit operator FixedPoint(float oc)
{
FixedPoint etc = new FixedPoint();
etc._myValue = oc;
return etc;
}
... usage
FixedPoint myNumber = (FixedPoint)0.5f;
Sobrecarga del operador de fundición 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;
}
}
Así que puedes usar:
FixedPoint fp = 1;
float f = fp;