假设我定义了以下方法:
int ReturnNumber(int number)
{
return number;
}
现在,假设我还定义了以下两个方法:一个常规方法:
void Print(Func function)
和一个扩展方法:
static void Print(this Func function)
我可以这样调用前者:
Print(ReturnNumber); // 常规方法调用,似乎会将ReturnNumber隐式转换为Func 但是我不能使用后者:
ReturnNumber.Print(); // 扩展方法调用,似乎不会进行隐式转换--导致编译错误
尽管我可以这样做:
((Func)ReturnNumber).Print(); // 我显式执行转换
我假设当您将方法作为参数传递给另一个方法时,会发生一些“魔法”,因此编译器能够猜测它应该尝试将ReturnNumber转换为Func,而编译器对扩展方法则没有这样的处理。这是正确的吗?我的问题可以概括为:为什么无法在方法上调用扩展方法,而可以在委托实例上调用扩展方法?这是否与编译器仅将委托视为对象而非方法有关?