¿Por qué no puedo definir operadores implícitos y explícitos como ese?¿Por qué no puedo definir operadores implícitos y explícitos?
public class C
{
public static implicit operator string(C c)
{
return "implicit";
}
public static explicit operator string(C c)
{
return "explicit";
}
}
Usted puede hacer este truco sin embargo :)
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;
}
}
Esta impresora:
implicit
explicit
¿Quién dice que no puede? Es decir, ¿qué pasa cuando lo intentas? –
¿Por qué querrías implementaciones diferentes entre los dos? –
Anulación de ToString ni siquiera está CERCA de un operador de conversión implícito. Su código de ejemplo solo funciona porque Console.WriteLine tiene una sobrecarga de objeto y llama a ToString() en el objeto. – Samuel