[置顶] 扩展方法入门

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);

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

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

原文地址:https://www.cnblogs.com/riskyer/p/3235605.html