Yes, there is an implicit conversion to int , and the WriteLine(int) overload is more specific than WriteLine(object) , so it will use this.
You can explicitly call WriteLine(object) overload:
Console.WriteLine((object)c1);
... or you can call ToString yourself, so Console.WriteLine(string) is called:
Console.WriteLine(c1.ToString());
... or you can just remove the implicit conversion to int . How useful is this to you? I'm generally not a supporter of implicit conversions for this kind of thing ... (Of course, you could keep the implicit transform with int if you really wanted to.)
Jon skeet
source share