麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

01-C#入門(函數重載、委托)

2019-11-14 16:43:12
字體:
來源:轉載
供稿:網友
  • 函數的重載

相對委托,是比較好理解的。

涉及一個概念:函數簽名。函數簽名包括函數的名稱和參數,而函數重載:就是使用相同的名稱和不同的參數(參數類型、傳遞方式[傳值或引用])來實現的。而不能聲明相同的函數名稱和參數,但是不同的返回類型,這樣做并不是函數重載:因為函數簽名沒有包括其返回類型,所以這樣做實際相當于重復定義函數,肯定會報錯的。

        static int MaxVal(int[] intArrayVal)        {            int maxVal = intArrayVal[0];            for (int i = 0; i < intArrayVal.Length; i++)            {                if (intArrayVal[i] > maxVal)                {                    maxVal = intArrayVal[i];                }            }            return maxVal;        }        static double MaxVal(double[] doubleArrayVal)        {            double maxVal = doubleArrayVal[0];            for (int i = 0; i < doubleArrayVal.Length; i++)            {                if (doubleArrayVal[i] > maxVal)                {                    maxVal = doubleArrayVal[i];                }            }            return maxVal;        }

聲明兩個函數的版本(同名),在使用時,輸入函數名:MaxVal( 即可得到提示信息,可發現參數有兩種,只需要輸入相符類型的參數即可:

            int[] myInt = { 1, 3, 4, 5 };            double[] myDouble = { 3.14, 3.15, 3.22, 3.01, 2.14 };            Console.WriteLine("myInt 最大值是 {0}", MaxVal(myInt));            Console.WriteLine("myDouble max value is: {0}", MaxVal(myDouble));

當然,重載還包括不同的參數類型(比如ref),可實現同一個函數,不同的傳值處理方式(被重載)。

  • 委托

在定義了委托后,就可以聲明該委托類型的變量。接著,把這個變量初始為與委托有相同返回類型和參數列表的函數引用。之后,就可以使用委托變量調用這個函數,就像變量是一個函數一樣。看個例子吧:

    class PRogram    {        //定義委托:之后可聲明委托類型的變量;        //初始化委托變量:可以初始化該變量為函數的引用,在初始化時需指定對應的函數名;            //對這些函數有個要求:必須是返回類型、參數列表與委托相同的;        //使用委托變量:在使用該委托變量時,用法和函數一樣(包括返回值);        //思考?如果不用委托,判斷用戶輸入,再調用對應的函數,一樣可以達到效果&hellip;…            //錯,重點是:可以把委托變量作為參數傳遞給一個函數,這樣,該函數就可以使用委托調用它引用的任何函數,而且在運行之前無需知道調用的是哪個函數。        delegate double ProcessDelegate(double param1, double param2);        static double Multiply(double param1, double param2)        {            return param1 * param2;        }        static double Divide(double param1, double param2)        {            return param1 / param2;        }        static void Main(string[] args)        {            ProcessDelegate process;            Console.WriteLine("請輸入兩個數,用逗號隔開:");            string input = Console.ReadLine();            int commaPos = input.IndexOf(',');            //聲明初始化兩個double值,從上面獲取的數中轉換,用commaPos來判斷值的內容            double param1 = Convert.ToDouble(input.Substring(0,commaPos));            double param2 = Convert.ToDouble(input.Substring(commaPos + 1, input.Length - commaPos - 1));            Console.WriteLine("輸入 M 執行 相乘 或者輸入 D 執行 相除 操作:");            input = Console.ReadLine();            if (input == "m")                //初始化委托變量,指定委托類型(上面建的ProcessDelegate),并提供一個引用函數的參數,                //這是委托賦值的一種語法,在括號中,指定相應的函數名(不帶括號);                //還有簡單的用法,process = Multiply;                //編譯器會自動匹配委托變量與函數的返回類型和參數,不匹配,應該會報錯;                process = new ProcessDelegate(Multiply);            else                process = new ProcessDelegate(Divide);            Console.WriteLine("根據你的選擇,委托在實例化的時候,調用不同的函數;");            Console.WriteLine("并且,在這一步傳遞對應的參數給委托(委托交給函數),計算的結果:{0}", process(param1, param2));            Console.ReadKey();        }    }

重點是:可以把委托變量作為參數傳遞給一個函數,這樣,這個函數就可以使用委托調用它引用的任何函數,而且在運行之前無需知道調用的是哪個函數。

  • 結語

之前看同事演示過項目中運用到的委托機制,雖然這兒把原理搞清楚了,但是深入的使用仍然很模糊,不過據說要等到13章介紹到與事件處理相關的內容時才更容易理解。

終于把這一篇比較重要的內容看完了,不過,沒有系統化的做出案例,仍然不能說是掌握了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久精品一二三区 | 黄色片免费看看 | 美女视频黄a视频免费全过程 | 露脸各种姿势啪啪的清纯美女 | 五月天影院,久久综合, | 成人国产精品久久 | 国产成人77亚洲精品www | 色综合视频 | 亚洲第一视频在线 | 男女污污视频网站 | 国产成人视屏 | 福利在线小视频 | 久久大陆 | 成人福利视频在线 | 久久久久久久久成人 | 国产成年人视频 | 国产精品一区二区三区在线播放 | 成人午夜淫片a | 国产免费一级 | 国产三级在线观看a | 麻豆一二区 | 欧美一级鲁丝片免费看 | h视频在线观看免费 | 免费福利在线视频 | 色999国产 | 在线高清中文字幕 | 极品大长腿啪啪高潮露脸 | 五月婷婷第四色 | 日韩午夜片 | 国产成年人在线观看 | 狠狠干91| www.91sese| 免费在线观看午夜视频 | 粉嫩蜜桃麻豆免费大片 | 亚洲小视频在线观看,com | 天天色宗合 | 亚州精品在线视频 | 婷婷一区二区三区 | 九色中文| 国产精品久久久久久久久久久久久久久 | a集毛片 |