overloaded - redefine operator c#
¿Por qué no puedo definir operadores implícitos y explícitos? (2)
No conozco las limitaciones técnicas que lo impiden, pero creo que lo habrían hecho para evitar que las personas se disparen.
string imp = new C(); // = "implicit"
string exp = (string)new C(); // = "explicit"
Eso me volvería loco y no tiene sentido, C
solo debería lanzar a una cadena 1, no a 2 formas diferentes.
¿Por qué no puedo definir tanto los operadores implícitos como los explícitos?
public class C
{
public static implicit operator string(C c)
{
return "implicit";
}
public static explicit operator string(C c)
{
return "explicit";
}
}
Puedes hacer este hack aunque :)
class Program
{
public class A
{
}
public class B
{
public static implicit operator A(B b)
{
Console.WriteLine("implicit");
return new A();
}
}
public class C : B
{
public static explicit operator A(C c)
{
Console.WriteLine("explicit");
return new A();
}
}
static void Main(string[] args)
{
C c = new C();
A a = c;
A b = (A) c;
}
}
Esto imprime:
implicit
explicit
Verifique esto: ¿Por qué no puede coexistir un operador implícito y explícito del mismo tipo en C #?
Si define un operador explícito, podrá hacer algo como esto:
Thing thing = (Thing)"value";
Si define un operador implícito, aún puede hacer lo anterior, pero también puede aprovechar la conversión implícita:
Thing thing = "value";
En resumen, explícito solo permite la conversión explícita, mientras que implícito permite tanto explícito como implícito ... de ahí la razón por la que solo puede definir uno.