日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

17.C#类型判断和重载决策(九章9.4)

發布時間:2025/4/14 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 17.C#类型判断和重载决策(九章9.4) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  今天來結束第九章,聊下我們經常忽略,但是編譯器會幫我們完成的"類型判斷和重載決策",理解編譯器如何幫我們完成,相信在寫代碼時會更明確,避免一些編譯出錯,排查的問題,讓我們開發更給力。

  我們知道隱式類型的數組以及將方法組轉換為委托類型都需要類型推斷,但將方法組作為其它方法的參數進行轉換時,會顯得極其復雜,我們由淺入深,一步一步來看,編譯器是如何幫我們做的一些推斷。

1 //定義一個泛型方法,參數分別為TInput類型和一個Func<TInput, TResult>類型的委托 2 public static TResult Get<TInput, TResult>(TInput input, Func<TInput, TResult> func) 3 { 4 return func(input); 5 } 6 static void Main(string[] args) 7 { 8 var a = Get("111", x => int.Parse(x)); 9 //第一個參數是字符串,所以可以推斷TInput類型有到string類型的隱式轉換 10 //則方法簽名為:public static TResult Get<string, TResult>(string input, Func<string, TResult> func) 11 //第二個參數是一個Lambda表達式,根據返回的類型是一個int,所以可以推斷TResult類型有到int類型的隱式轉換 12 //則方法簽名為:public static int Get<string, int>(string input, Func<string, int> func) 13 //根據上述的步驟,我們推斷出了TInput和TResult類型 14 }

  返回類型集合

  從上述代碼中,可以看到TResult類型是由Lambda表達式的返回值類型來推斷的,那如果我有多個返回類型又是一種什么情況呢?請看下面的代碼。

1 var b = Get(1111, delegate (int x) { 2 if (x == 1111) 3 { 4 return "1111"; 5 } 6 else 7 { 8 return new object(); 9 } 10 }); 11 //由上可以推斷出TInput類型有到int類型的隱式轉換,則TInput為int 12 //而返回類型有兩個,一個是string類型,一個是object類型,但是string類型有到object類型的隱式轉換,則TResult為object類型 13 //編譯器幫我們把所有的返回類型放入一個集合,對集合中的類型進行判斷,判斷是否有一個類型是可由剩余其它類型隱式轉換可得,則把這個類型作為返回值的類型

?

  如何選擇正確的重載

  如果重載具有二義性,那編譯肯定是過不了的,要么強制轉換某個參數以符合某個方法的簽名,或者修改重載方法。從參數或者返回類型考慮,請參照下面一條:

  從任何類型"轉換成它本身"被認為好于"轉換成其它類型",如

1 static void Debug0(int x) { } 2 static void Debug0(double x) { } 3 4 Debug0(5); //static void Debug0(int x) 5 Debug0(5.0); //static void Debug0(double x) 6 //int有到double的隱式轉換,所以存在二義性,但根據int=>int是好于int=>double的,所以選擇使用static void Debug0(int x)

?

  同理于返回類型,作用于委托或者Lambda表達式,如

1 static int Debug1(Func<int> func) { 2 return func(); 3 } 4 5 static double Debug1(Func<double> func) 6 { 7 return func(); 8 } 9 10 Debug1(() => 1.1); 11 Debug1(delegate () { return 1.1; }); 12 //根據Lambda表達式和匿名方法,Debug1(() => 1.1)和Debug1(delegate () { return 1.1; })返回的類型是double類型,則Lambda表達式和匿名方法轉換成Func<double>類型的實例,調用的則是static double Debug1(Func<double> func) 13 Debug1(() => 1); 14 Debug1(delegate () { return 1; }); 15 //根據Lambda表達式和匿名方法,Debug1(() => 1)和Debug1(delegate () { return 1; })返回的類型是int類型,則Lambda表達式和匿名方法轉換成Func<int>類型的實例,調用的則是static double Debug1(Func<int> func)

  請斧正。

?

轉載于:https://www.cnblogs.com/a2htray/p/4214323.html

總結

以上是生活随笔為你收集整理的17.C#类型判断和重载决策(九章9.4)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品裸体舞一区二区三区 | 级毛片| 一级全黄男女免费大片 | 人乳喂奶hd无中字 | 双性皇帝高h喷汁呻吟 | 亚洲欧洲无码一区二区三区 | 美女啪啪网站 | 日本成人在线播放 | 男女涩涩| 国产九九九精品 | 亚洲综合免费观看高清完整版在线 | 中文字幕日韩一区二区 | 涩涩视频在线观看免费 | 激情六月天| 男人天堂综合网 | 中文字幕+乱码+中文 | 亚洲淫 | av在线免费观看一区 | 成人av动漫 | 亚洲精品大片 | 老头老太吃奶xb视频 | 天天干夜夜干 | 成人综合av| 奇米影视第四色首页 | 国产精品19乱码一区二区三区 | 国产男女爽爽爽 | 黄色短视频在线播放 | 懂色av一区二区 | 亚洲精品国产精品乱码桃花 | 中文字幕视频在线播放 | 亚洲欧洲中文字幕 | 亚洲av综合av一区二区三区 | 亚洲色图35p| 黄色高清视频在线观看 | 先锋资源国产 | 我们好看的2018视频在线观看 | 91玉足脚交白嫩脚丫 | 高跟鞋肉丝交足91 | 老司机成人免费视频 | 一本色道久久加勒比精品 | 在线观看三级网站 | aa在线| 95精品视频 | 亚洲av成人精品午夜一区二区 | 国产黄色视 | 壮汉被书生c到合不拢腿 | 亚洲毛片网站 | 91超碰免费在线 | 精品日韩欧美 | av老司机在线 | 国内精品嫩模av私拍在线观看 | 素人一区| 一级片大片| 亚洲天堂一区二区三区 | 荫蒂被男人添免费视频 | 黄污视频网站 | 黄页网站在线播放 | 性感美女一区二区三区 | 国产wwwwwww| 激情免费av | 91九色成人 | 最新中文字幕在线视频 | 日本韩国中文字幕 | 国产激情视频一区二区 | caopeng在线 | 九月激情网| 蜜桃视频免费网站 | 综合色av| 国产精品日本一区二区在线播放 | 伊人亚洲影院 | 亚洲大成色 | 久久九九精品视频 | 懂色一区二区三区免费观看 | 国产成人精品一区二区三区福利 | 国产黄色一级片 | 日本一卡二卡在线 | 自拍偷拍激情小说 | 亚洲熟女一区二区三区 | 亚洲美女精品 | a级国产毛片 | 天天干狠狠插 | 天堂色在线 | 外国黄色录像 | 免费看欧美黑人毛片 | 久久五月视频 | 老女人做爰全过程免费的视频 | aaaaa毛片 | 国产伦理片在线观看 | 干日本少妇 | 古代玷污糟蹋np高辣h文 | 亚洲无线观看 | 亚洲理论视频 | a级片在线观看 | 欧美黑人一区二区 | 最新av| 精品啪啪 | 免费a大片| 18无码粉嫩小泬无套在线观看 | 国产高潮视频在线观看 |