Reputation: 5048
I still haven't upgraded to 4.0 else I would have checked the code snippet myself. But I hope some expert can comment on this.
In following code, will the appropriate Print()
method be called at runtime? Is it even legal in C# 2010 to call it that way?
public void Test()
{
dynamic objX = InstantiateAsStringOrDouble();
Print(objX);
}
public void Print(string s)
{
Console.Write("string");
}
public void Print(double n)
{
Console.Write("double");
}
Thanks!
Upvotes: 3
Views: 1127
Reputation: 56769
Yes, and you can even do this:
public dynamic InstantiateAsStringOrDouble() { return 0.5; }
or
public dynamic InstantiateAsStringOrDouble() { return "hello"; }
and it will work as expected.
Upvotes: 2
Reputation: 38397
Yes, that does in fact work. It will check the usage of the dynamic at runtime and call the appropriate method, however you lose almost all of your compile-time checking, so I'd make sure that's really what you'd want to do.
Upvotes: 3