C 中is和as操作符的用法

2021-09-24 15:46:05 字數 1806 閱讀 8245

c#中 as 和強制轉換的總結

解析c#中的is和as操作符的用法

c# 是一門強型別語言. 一般情況下. 我們最好避免乙個型別強制轉成其他型別. 但是有時候難免使用型別轉換.

一般有以下幾種型別轉換的方法供選擇:

as型別轉換失敗時值為null不丟擲異常

但強制轉換如果轉換失敗會丟擲異常所以我們要新增異常處理

is: 檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,永遠不會丟擲異常

object o = new object();  

if (o is label)

else

在上面的**,clr實際上會檢查兩次物件的型別,is操作符先核實一次,

如果o相容於lable,那麼在(label)o時會再次核實一次,效率比較低,不建議使用

as:與強制型別轉換是一樣的,但是永遠不會丟擲異常,即如果轉換不成功,會返回null

object o = new object();  

label lb = o as label; // as 操作符

if (lb == null)

else

在上面的**中,clr只會進行一次型別核實,效率要高於 is

as只能用於引用型別不能用於值型別;

子類不能繼承父類的私有欄位. 可以繼承屬性與方法.

子類會預設呼叫父類的無參建構函式. 如果父類中有乙個有慘的建構函式. 無參建構函式會被覆蓋?. 子類呼叫報錯. 解決方法: 使用base()關鍵字.

若子類和父類方法名相同. 子類會覆蓋父類的.

乙個類繼承其他類. 那麼預設繼承object. 即. 萬物基於object.

黎克特制轉換原則:物件導向設計的基本原則,基類出現的地方,子類一定可以出現。

只有子類替換掉父類,軟體的功能不受影響時,父類可以真正的被復用。子類可以在父類的基礎上增加新的行為。

第一種方法:

student stu=new student;//建立乙個子類物件

person p=stu;//將子類物件賦給父類物件

p.show();//呼叫父類的方法

第二種方法:

person p =new student();	//父類物件接受子類的例項物件

student stu=(student)p; //強制轉換成子類

第三種方法:使用關鍵字(is/as)

is用法:(p is teacher)p是父類的例項化物件,teacher是帶轉換的型別,表示式返回的是布林值。

person p=new student();

if(p is student)

else

as用法:(p as teacher)as先做判斷,再轉換。返回值為null值。\

person p=new student();

student t=p as student;

所有的子類也都是父類的,可以申明乙個父類的變數,來接受其所有的子類;

父類若存的是子類的物件,可以將父類轉成相應的子類物件

作用:把不同子類的物件統一轉換為父類(基類)的型別,使資料型別達到統一。在父類物件所在的位置都可以傳進來子類的物件,盡可能重用**。

這不是就是多型…

解析C 中is和as操作符的用法

c 中 is和as 操作符是用來進行強制型別轉換的 is 檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,永遠不會丟擲異常 在上面的 clr實際上會檢查兩次物件的型別,is操作符先核實一次,如果o相容於lable,那麼在 label o時會再次核實一次,效率比較低,不建議使用 as 與強...

解析C 中is和as操作符的用法

c 中 is和as 操作符是用來進行強制型別轉換的 is 檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,永遠不會丟擲異常 object o new object if o is label else 在上面的 clr實際上會檢查兩次物件的型別,is操作符先核實一次,如果o相容於labl...

解析C 中is和as操作符的用法

c 中 is和as 操作符是用來進行強制型別轉換的 is 檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,永遠不會丟擲異常 object o newobject if o islabel else 在上面的 clr實際上會檢查兩次物件的型別,is操作符先核實一次,如果o相容於lable,...