比如有一个扩展方法:
public static void ExtendFunc<T>(this List<T> list)
{
//.....
}
那么用户可以直接这样调用:
List<string> list = new List<string>();
list.ExtendFunc();
我现在的疑问是,编译器是怎么发现变量list有一个扩展方法ExtendFunc()的呢? 如果一个扩展方法有泛型参数,比如上面的定义,就感觉很别扭.........
我的
猜想是这样的:
首先检测到list是一个List<string> , 尝试调用ExtendFunc()时,检测List<string>是否符合List<T>,如果符合,把string传送给ExtendFunc方法中的T,否则无法调用。
请问各位大大们都是怎么理解的呢?