1. 程式人生 > >C# Extension Method 擴充套件方法

C# Extension Method 擴充套件方法

擴充套件方法是C# 3.0的新特性。它為現有的型別新增方法,從而解決了使用繼承擴充套件所帶來的所有弊端。

Demo 1 簡單的擴充套件方法

using System;

namespace ExtensionMethod
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = null;
            Console.WriteLine("字串str為空字串: " + s.AddMethod_IsNull());
            Console.WriteLine("字串str長度: " + s.AddMethod_Length());
            Console.Read();
        }
    }

    //在靜態類中定義擴充套件方法
    static class NullExten
    {
        //為string型別定義擴充套件方法AddMethod_IsNull。
        public static bool AddMethod_IsNull(this string str)
        {
            return null == str;
        }

        //為string型別定義擴充套件方法AddMethod_Length
        public static int AddMethod_Length(this string str)
        {
            if(str!=null)
            {
                return str.Length;
            }
            else
            {
                return 0;
            }
           
        }
    }
}

Demo 2 擴充套件方法的呼叫順序

using System;

namespace ExtensionMethodSequence
{
    using AnotherNameSpace;
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person() { Name = "Daniel" };
            p.Print();//無參,呼叫本名稱空間
            p.Print("Hello");//一個引數,呼叫另一名稱空間。
            Console.Read();
        }
    }

    public class Person
    {
        public string Name { get; set; }
    }

    public static class ExtensionClass
    {
        //ExtensionMethodSequence 名稱空間下的只帶一個引數的擴充套件方法,相當於無參
        public static void Print(this Person per)
        {
            Console.WriteLine("呼叫當前名稱空間下的擴充套件方法,姓名為:{0}", per.Name);
        }
    }

}

namespace AnotherNameSpace
{
    //引用
    using ExtensionMethodSequence;
    public static class ExtensionClass1
    {
        //AnotherNameSpace 名稱空間下的只帶一個引數的擴充套件方法
        public static void Print(this Person per, string s)//using ExtensionMethodSequence使Person有意義
        {
            Console.WriteLine("呼叫另一名稱空間下的擴充套件方法,姓名為:{0},增加引數:{1}", per.Name,s);
        }

        public static void Print(this Person per)
        {
            Console.WriteLine("呼叫另一名稱空間下的擴充套件方法,姓名為:{0}", per.Name);
        }
    }
    
}