• [置顶] 扩展方法入门


    1. 扩展方法的定义

    通过前一节的实例学习,我们了解到:扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。使用扩展方法,可以向现有类型“添加”方法。

    下面,再给出一个实例,希望通过对这个实例的学习,能进一步加深对扩展方法的理解。

    首先,创建扩展方法:

        public static class ExtendFunction
        {
            public static void  Print(this object o)
            {
                Console.WriteLine(o);
            }
    }
    

    接下来,添加方法调用的代码:

            static void Main(string[] args)
            {
                //
                string s = "hell,world!";
                s.Print();
    
                //
                int i = 32;
                i.Print();
            }
    

    执行程序,得到以下结果:

    在这个实例中,扩展方法接收的参数类型为object,所以,对于任意的 object 使用这个方法应该都是合法的。于是,在前面代码的基础上,增加一个TestClass类,并使用该类的实例来调用这个方法,看看结果如何。新的代码如下:

        class TestClass
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public string Sex { get; set; }
            public bool IsMarried { get; set; }
            public String Note { get; set; }
    
            public TestClass()
            {
                Name = "tiana0";
                Age = 1800;
                Sex = "非人类";
                IsMarried = false;
                Note = "1800岁的非人类,你敢嫁给他吗";
            }
    }
    
        class Program
        {
            static void Main(string[] args)
            {
                //
                string s = "hell,world!";
                s.Print();
    
                //
                int i = 32;
                i.Print();
    
                //
                TestClass testClass = new TestClass();
                testClass.Print();
            }
    }
    

    执行结果如下:

    很显然,使用自己定义的类的实例来调用这个方法也是可行的,只是,输出的是类的名称信息,要想输出类的成员信息,可以使用下面的代码:

                testClass.Name.Print();
                testClass.Age.Print();
                testClass.Sex.Print();
                testClass.IsMarried.Print();
                testClass.Note.Print();
    

    再次执行程序,结果为:

    这样,类的成员信息也可以被输出了。

    这里可能会用人问,我们使用TestClass.Print() 可不可以呢?结果很显然,各位,你们说呢。

    2.扩展方法跟普通的实例方法又有什么区别?

    对于用 C# 编写的代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

    3.什么样的方法可以作为扩展方法呢?

    这种方法,必须具备以下几个特征:

    它必须在一个非嵌套的,非泛型的静态类中;

    它至少要有一个参数;

    第一个参数必须附上this关键字作为前缀;

    第一个参数不能有其他任何修饰符(如out或ref);

    第一个参数的类型不能是指针类型。

    今天,就讲到这里,下一节,我们将会通过一个实例,来学习扩展方法何时被调用。

  • 相关阅读:
    JavaScript中的闭包(closure)
    JavaScript中的继承与原型链
    一个PHP操作大变量的例子
    深入PHP内核之参数
    django创建一个简单的web站点
    django通过添加session来保存公共变量
    第一次登录mysql,使用任何命令都报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    django搭建的站点,通过localhost能访问,但是通过ip不能访问
    django models实际操作中遇到的一些问题
    python3 django连接mysql,同步表结构
  • 原文地址:https://www.cnblogs.com/riskyer/p/3235605.html
Copyright © 2020-2023  润新知