Why I cannot define both implicit and explicit operators like so?
public class C
{
public static implicit operator string(C c)
{
I don't know the technical limitation that prevents this, but I think they would have done this to prevent people from shooting their own feet off.
string imp = new C(); // = "implicit"
string exp = (string)new C(); // = "explicit"
That would drive me bonkers and makes no sense, C should only cast to a string 1 way, not 2 different ways.