The delegate is bound to myCheckFuntion(Object) at compile time - you tell it to find a method that accepts Object . This binding is only to one method - it does not execute overload resolution at run time based on the actual type of the argument.
When you call pg.myCheckFuntion("Hello") , which will bind to myCheckFuntion(String) at compile time because "Hello" is a string, and converting from string to string is preferable to converting from string to object in overload resolution.
Please note that if you write:
object text = "Hello"; pg.myCheckFuntion(text);
then it will call myCheckFuntion(Object) .
Jon skeet
source share