c#中 as 和強制轉換的總結c# 是一門強型別語言. 一般情況下. 我們最好避免乙個型別強制轉成其他型別. 但是有時候難免使用型別轉換.解析c#中的is和as操作符的用法
一般有以下幾種型別轉換的方法供選擇:
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,...