国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-14 16:43:12
字體:
供稿:網(wǎng)友
  • 函數(shù)的重載

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

涉及一個(gè)概念:函數(shù)簽名函數(shù)簽名包括函數(shù)的名稱和參數(shù),而函數(shù)重載:就是使用相同的名稱和不同的參數(shù)(參數(shù)類型、傳遞方式[傳值或引用])來實(shí)現(xiàn)的。而不能聲明相同的函數(shù)名稱和參數(shù),但是不同的返回類型,這樣做并不是函數(shù)重載:因?yàn)楹瘮?shù)簽名沒有包括其返回類型,所以這樣做實(shí)際相當(dāng)于重復(fù)定義函數(shù),肯定會報(bào)錯(cuò)的。

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

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

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

當(dāng)然,重載還包括不同的參數(shù)類型(比如ref),可實(shí)現(xiàn)同一個(gè)函數(shù),不同的傳值處理方式(被重載)。

  • 委托

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

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

重點(diǎn)是:可以把委托變量作為參數(shù)傳遞給一個(gè)函數(shù),這樣,這個(gè)函數(shù)就可以使用委托調(diào)用它引用的任何函數(shù),而且在運(yùn)行之前無需知道調(diào)用的是哪個(gè)函數(shù)。

  • 結(jié)語

之前看同事演示過項(xiàng)目中運(yùn)用到的委托機(jī)制,雖然這兒把原理搞清楚了,但是深入的使用仍然很模糊,不過據(jù)說要等到13章介紹到與事件處理相關(guān)的內(nèi)容時(shí)才更容易理解。

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 根河市| 乌审旗| 军事| 宁武县| 杭锦后旗| 华亭县| 山丹县| 闸北区| 农安县| 基隆市| 全州县| 孝义市| 上栗县| 平陆县| 海伦市| 多伦县| 留坝县| 洛浦县| 成武县| 霍山县| 新密市| 龙川县| 家居| 汤阴县| 鞍山市| 闻喜县| 广灵县| 江陵县| 建水县| 沙河市| 天镇县| 平凉市| 淮滨县| 道孚县| 高安市| 稷山县| 永嘉县| 来凤县| 云南省| 德江县| 桦甸市|