c#扩展方法

c#扩展方法

  • 扩展方法就是为一个类添加一个新的方法,但是并不是在一个类的内部去添加,如下代码,假如我们有一个类名为A

     public class A
        {
            public void PrintA()//这个方法 并不是扩展方法,因为它就是在A的内部写的一个普通的方法
            {
                Console.WriteLine("我是A中的方法");
            }
        }
    
  • 而扩展方法是,我们在类B中写一个方法,但是这个方法是用来给A的实例化对象来使用的

    public static class B
        {
            public static void PrintB(this A a)//第一个参数的写法,但是实际调用时候不用,这表示给A扩展一个新的方法
            {
                Console.WriteLine("这是A的扩展方法");
            }
        }
    A的对象就可以使用B中的这个方法
    A a = new A();//实例化一个A的对象
    a.PrintB();//调用扩展方法
    
  • 所以扩展方法就是在不改变类A的基础上,去为其添加一个新的方法,但是也以下几点需要注意

    • 在写法上
    1. 扩展方法必须写在一个静态类中,并且是一个静态的方法
    2. 扩展方法的第一个参数的写法必须为:this+"要添加扩展方法的类名"+"要添加扩展方法的类的对象"
    public static class B
    {
            public static void PrintB(this A a)
            {
                Console.WriteLine("这是A的扩展方法");
            }
    }
    
  • 其他地方中:

  1. 扩展方法不能为静态类添加。
  2. 扩展方法可以重载,但是如果同名且参数一样,即添加了一个同名且参数相同的扩展方法,扩展方法并不会生效,类对象还会调用自己原先的那个方法。如:
public  class A
    {
        public  void PrintA()
        {
            Console.WriteLine("我是A中的方法");
        }
    }

    public static class B
    {
        public static void PrintA(this A a)
        {
            Console.WriteLine("这是A的扩展方法");
           
        }
    }
A a = new A();
a.PrintA();输出结果为“我是A中的方法”
posted @ 2021-12-26 16:08  杨超越的唯一弟子  阅读(100)  评论(0)    收藏  举报