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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C#的类型安全

發(fā)布時(shí)間:2024/1/17 C# 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#的类型安全 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

類型安全應(yīng)該算是CLR最重要的特性之一了,在運(yùn)行時(shí),CLR總是知道一個(gè)對(duì)象的類型。在C#中可以調(diào)用GetType()來(lái)返回調(diào)用對(duì)象的類型,并且由于GetType()繼承于System.Object對(duì)象,并且為非虛的方法,所以一個(gè)類型不可能通過(guò)重寫此方法而偽裝成另一種類型。

由于在開發(fā)的過(guò)程中,經(jīng)常會(huì)需要將一個(gè)對(duì)象從一種類型轉(zhuǎn)換為其他的類型,所以CLR允許將一個(gè)對(duì)象強(qiáng)制轉(zhuǎn)換成它本身所引用的類型或派生其的基類型。一個(gè)對(duì)象向其父類的轉(zhuǎn)換CLR認(rèn)為是一種安全的隱式轉(zhuǎn)換,不需要任何特殊的然而需要將一個(gè)對(duì)象轉(zhuǎn)換為其派生類型時(shí),則需要進(jìn)行顯示的轉(zhuǎn)換,因?yàn)檫@樣的轉(zhuǎn)換可能在運(yùn)行時(shí)失敗。

下面來(lái)看一個(gè)例子:


?1namespace?LearnProject?{
?2????class?Program?{
?3????????
?4????????static?void?Main(string[]?args)
?5????????{
?6????????????//此類型轉(zhuǎn)換不需要顯示的進(jìn)行,因?yàn)閚ew返回的對(duì)象類型為Student
?7????????????//Person是Student的基類
?8????????????Person?student?=?new?Student();
?9????????????student.Eat();
10????????????//虛方法Work()在子類Student中被重寫?[多態(tài)的應(yīng)用]
11????????????student.Work();
12????????????//使用Object類型的變量去保存Student對(duì)象的引用依然不需要進(jìn)行任何顯示的轉(zhuǎn)換
13????????????//任何類型均是由System.Object派生而來(lái)
14????????????Object?objStudent?=?new?Student();
15
16????????????//將Object類型objStudent轉(zhuǎn)換成其派生類型Student則需要強(qiáng)制類型轉(zhuǎn)換
17????????????Student?studentObj?=?(Student)objStudent;
18
19????????????Program?p?=?new?Program();
20????????????//編譯器會(huì)自動(dòng)檢測(cè)將要進(jìn)行強(qiáng)制類型轉(zhuǎn)換的對(duì)象是否為目標(biāo)類型的基類或者派生類型,如果不是則在編譯期出現(xiàn)錯(cuò)誤
21????????????Student?studentProgram?=?(Student)p;
22
23????????????//然而此用顯式的轉(zhuǎn)換則能夠正常通過(guò)編輯,但是會(huì)在運(yùn)行時(shí)拋出一個(gè)InvalidCastException異常
24????????????Object?obj?=?new?Program();
25????????????Student?studentObj2?=?(Student)obj;
26????????}
27????}
28}

?1??public?class?Person
?2?????{
?3?????????public?void?Eat()
?4?????????{
?5?????????????Console.WriteLine("吃飯");
?6?????????}
?7?????????public?virtual?void?Work()
?8?????????{
?9?????????????Console.WriteLine("工作");
10?????????}
11?????}
12?????public?class?Teacher?:?Person
13?????{
14?????????public?override?void?Work()
15?????????{
16?????????????Console.WriteLine("教書");
17?????????}
18?????}
19?????public?class?Student?:?Person
20?????{
21?????????public?override?void?Work()
22?????????{
23?????????????Console.WriteLine("沒(méi)有工作,需要上學(xué)");
24?????????}
25?????}

轉(zhuǎn)載于:https://www.cnblogs.com/zuking/p/3947401.html

總結(jié)

以上是生活随笔為你收集整理的C#的类型安全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。