C# 中擴展方法應用


擴展方法是C# 3.0 中新增特性,可在不修改源類代碼情況,通過ADD File 模式對源代碼功能擴展。

擴展方法要求如下:

a.擴展方法需包含在 static 修飾類中.

b.擴展實現需是靜態形式。

c.擴展方法第一個參數 前綴為 this , 表示需要擴展類對象,從第二個參數開始,為擴展方法參數列表。

 

1.基礎類型擴展示例

如下擴展對字符類型增加換行符:

public static  class StringExt
    {
        public static string AddNewLine(this string str) {
            return str + Environment.NewLine;
        }
    }

 

 如下擴展方法將字典類型Value 值拼接返回:

 public static  class DictionaryToEXT
    {
        public static string DictionaryToString<T1, T2>(this Dictionary<T1, T2>  dic ) {
            StringBuilder strBui = new StringBuilder();
            foreach (KeyValuePair<T1, T2> k in dic) {
                strBui.AppendLine(k.Value.ToString());
            }

            return strBui.ToString();
        }
    }

 

 2.泛型擴展方法

泛型擴展,對任意對象增加 ExtToString  方法.

 public static string ExtToString<T>(this T t){
            return t.ToString();
        }

 

 下面是比較復雜泛型擴展方法推斷,注意,擴展方法之后的泛型參數不能做為擴展方法簽名中一部份:

 public static class PipelineStepExtensions
    {
        public static OUTPUT Step<INPUT, OUTPUT>(this INPUT input, IPiPelineStep<INPUT, OUTPUT> step) 
        {
            return step.Process(input);
        }

        public static object Step<INPUT>(this INPUT input, IPiPelineStep<INPUT, object> step)
        {
            return step.Process(input);
        }

    }

 

testMethod.Step(pppp) 實際調用: public static OUTPUT Step<INPUT, OUTPUT>(this INPUT input, IPiPelineStep<INPUT, OUTPUT> step) 

testMethod.Step(ppppObject); 實際調用:public static object Step<INPUT>(this INPUT input, IPiPelineStep<INPUT, object> step)

 

 

 如下調整,也能編譯通過,表明泛型擴展方法簽名與泛型參數個數沒有關系 , testMethod 只有一個泛型參數,而 Step 擴展有兩個泛型參數 :

 public static class PipelineStepExtensions
    {
        public static OUTPUT Step<INPUT, OUTPUT>(this INPUT input, IPiPelineStep<INPUT, OUTPUT> step) 
        {
            return step.Process(input);
        }

        //public static object Step<INPUT>(this INPUT input, IPiPelineStep<INPUT, object> step)
        //{
        //    return step.Process(input);
        //}

    }

 

  TestGuanDao<int> testMethod = new TestGuanDao<int>();
   
  IPipelineStepDic<TestGuanDao<int> , string> pppp = new IPipelineStepDic<TestGuanDao<int>, string>();

  testMethod.Step(pppp);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM