Pourquoi je ne peux pas définir à la fois les opérateurs implicites et explicites?Pourquoi ne puis-je pas définir des opérateurs implicites et explicites?
public class C
{
public static implicit operator string(C c)
{
return "implicit";
}
public static explicit operator string(C c)
{
return "explicit";
}
}
Vous pouvez le faire bidouillage :)
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;
}
}
Cette impression:
implicit
explicit
Qui a dit que vous ne pouviez pas? Soit, que se passe-t-il lorsque vous essayez? –
Pourquoi voudriez-vous différentes implémentations entre les deux? –
Overriding ToString n'est même pas proche d'un opérateur de distribution implicite. Votre exemple de code ne fonctionne que parce que Console.WriteLine a une surcharge d'objet et appelle ToString() sur l'objet. – Samuel