C 基礎知識 is與as

2022-01-29 21:38:17 字數 1685 閱讀 4315

一、is與as對比

is檢查乙個物件是否相容於指定的型別,並返回乙個boolean值:true或者fasle。

注:is操作符永遠不會丟擲異常

經常按如下方法使用:

classa

object o=new object();

boolean b1=(o is object); //b1為true.

boolean b2=(o is classa) ; b2為false.

如果物件引用是null,is操作符總是返回false,因為沒有可檢查的其型別的物件。

if(obj is classa)

classa a=(classa) obj;

在這段**中,clr實際會檢查兩次物件型別。is操作符首先核實obj是否相容於classa 型別,如果是,那麼在if語句內部執行型別轉換時,clr再次核實obj是否引用乙個classa。clr的型別檢查增強了安全性,但也會對效能造成一定的影響。

as與is做差不多的事情,型別顯式強制轉換。 as操作符的工作方式與強制型別轉換一樣,如果物件不能轉換,結果就是null。

as常用法如下:

object obj=new object();

classa a= obj  as classa;

if(a != null)  //在if判斷a是否為null

在這段**中,clr核實obj是否相容於classa型別,如果是,as會返回對同乙個物件的乙個非null引用;

如果obj不相容classa型別,as操作符會返回null。

因此,as操作符使clr只檢驗一次物件的型別。

當as操作符返回null的時候,如果不進行判斷直接呼叫,則會丟擲nullreferenceexception異常。

示例**:

object obj=new object(); //建立乙個object物件.

classa a =obj as classa;//將obj轉型為classa,此時轉型操作會失敗,不會丟擲異常,但a會被設為null.

a.tostring();//訪問a會丟擲乙個nullreferenceexception異常。

二、例子

1

public

class

calculator211

}12public

class

calculatorsub : calculator

1321}22

class

program

2337

var b = calbase as

calculatorsub;

38if(b != null)39

42bool c = calsub is

calculator;

43if

(c)44

47var d = calsub as

calculator;

48if(d != null)49

52 (calsub as calculator)?.add(2, 3);//

如果calsub as calculator為null,則不會呼叫add方法

5354

console.readkey();55}

5657 }

view code

C 基礎知識

抽象類 abstract class 一種不可以被例項化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽象類的抽象方法後才能被例項化。介面 inte ce 只含有共有抽象方法 public abstract method 的類。這些方法必須在子類中被實現。反射 程式集包含模...

c 基礎知識

或運算的意義是什麼 0 0 0 0 1 1 1 0 1 1 1 1 無進製與運算的意義是什麼 在vc中,視窗的每個屬性對應乙個只有一位為1的16位的二進位制數,當增加某屬性做或運算 即可,取消某個屬性只需與 上這個屬性的取反。cs.style ws maximizebox 和cs.style cs....

C 基礎知識

1 malloc和new區別與聯絡 a malloc malloc為函式,需要標頭檔案,申請的無型別,需要強制轉換 free釋放。示例 char p char malloc 10 sizeof char free p b new new是運算子,不需要標頭檔案,申請的是有型別的,自動呼叫建構函式 d...