I created a new class and used an operator in it
class blabla
{
public static implicit operator blabla(int val)
{
return new blabla();
}
}
class Program
{
static void Main()
{
blabla x = 15;
Console.WriteLine(x);
Console.Read();
}
}
But my program prints out ConsoleApplication1.blabla instead of 15. Why?
CodePudding user response:
You have created a conversion operator with this code:
public static implicit operator blabla(int val)
{
return new blabla();
}
This code converts an int
to a blabla
but your code ignores val
completely. You probably want to pass it to the new blabla
instance.
Maybe you want something like this:
class blabla
{
protected int val;
public blabla(int val) {
this.val = val;
}
public static implicit operator blabla(int val)
{
return new blabla(val);
}
public override string ToString() {
return val.ToString();
}
}
This calls the conversion operator and creates a new blabla
with the passed in value.
Also, it overrides ToString()
which is what gets called by Console.WriteLine
. If you don't override that, you get the default - which is what you are seeing in your output.
However, this seems overly complicated. Why not delete the conversion operator and just call the constructor directly?
static void Main()
{
blabla x = new blabla(15);
Console.WriteLine(x);
Console.Read();
}