扩展方法

扩展方法所在的类和扩展方法必须是静态的 并且扩展方法第一个参数是要扩展的类名 并在this

Person person = new Person();

public static class Extension
    {  
        public static void ExtensionMethod(this Person p)
        {
            .......;
        }
}

person.ExtensionMethod();

当person调用 ExtensionMethod()时,C# Compiler 会把这段Source Code 编译成Static Method 的IL Code。也可以理解为

编译器做了这样的处理,person.ExtensionMethod();  =>  ExtensionMethod(person);

C# Compiler 编译的过程是这样的:

    • 首先查看Person类中是否有ExtensionMethod()方法,有的话,直接调用;
    • 如果没有,在相应的NameSpace 当中,查找static Class,看看这些static Class当中,是否有public static void ExtensionMethod(this Person p) 这样的方法,如果也没有,编译通不过。