1. 程式人生 > 其它 >C#進階學習3--擴充套件方法(this)

C#進階學習3--擴充套件方法(this)

一.擴充套件方法的作用

1.擴充套件密封類中的方法和屬性

示例

假設又有一個第三方的類,如下:

    public sealed class Person
    {
        public string  Name { get; set; }
        public string  Phone { get; set; }
        public string getPhone()
        {
            return Phone;
        }
    }

現在有一個需求,需要給Person增加一個公共的呼叫方法,輸出當前類的Name,由於Person類是密封類,所以不能被繼承,這時候就可以使用擴充套件方法

 public static class PersonExtened
    {
        public static void ShowName(this Person person)
        {
            Console.WriteLine(person.Name);
        }
    }

這時即可直接呼叫該擴充套件方法,如下圖所示:

2.擴充套件介面

現有如下介面與實現類

    public interface ICalc
    {
        int add(int num1,int num2);       
    }
    class CalcFun : ICalc
    {
        public int add(int num1, int num2)
        {
            return num1 + num2;
        }
    }

假設現在有如下需求,在不更改現有介面的前提下,給所有實現Icalc介面的類增加減法,乘法,與除法的功能?這時候就可以用擴充套件方法實現,實現方式如下:

    public static class CalcFunExtend
    {
        public static int min(this ICalc calc, int num1, int num2)
        {
            return num1 - num2;
        }
        public static int mul(this ICalc calc, int num1, int num2)
        {
            return num1 * num2;
        }
        internal static int min(int v1, int v2)
        {
            throw new NotImplementedException();
        }
        public static int div(this ICalc calc, int num1, int num2)
        {
            return num1 / num2;
        }
    }

這個時候再呼叫實現了Icalc介面的方法,即可同步實現減法,乘法與除法的功能,如下圖所示:

總結

1.擴充套件方法的第一個引數必須要,並且必須用this修飾

2.擴充套件方法只能定義在靜態類中