what overloaded overload operator cannot c# operator-overloading

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.