C is和as操作符

2022-06-21 09:00:09 字數 1166 閱讀 1719

** 

is和as操作符

is操作符:檢查物件是否與給定型別相容。

說明:1、如果所提供的表示式非空,並且所提供的物件可以強制轉換為所提供的型別而不會導致引發異常,則 is 表示式的計算結果將是 true,否則返回false。

(1):表示式為空:返回false

//表示式為空

object oo = null;

bool isstudent3 = oo is student;

(2):表示式內容不為空,但強制轉換型別時發生異常,返回false

oo = new object();

bool isstudent4 = oo is student;

(3):表示式為null時,並不會拋異常,因為沒有正確的物件來做型別驗證。

as 運算子:用於在相容的引用型別之間執行轉換

說明:1、as操作符類似於強制轉換,但又有區別,當物件為null時,不會拋異常而是會返回null。

object _object = null;

student _s = _object as student;

object as student其實相當於_object is student?(student)_object:null;

之所以這樣說,我們可以從兩者的il**中看出些結論:首先我們例項化個基類物件。

object o = new student();

然後分別執行:

(1) o is student,對應il**

(2) o as student,對應il**

小結:兩段il**都執行了isinst,它代表的意思是:測試物件引用是否為特定類的例項,在as操作符後面有乙個stloc.1它代表的意思是:從計算堆疊的頂部彈出當前值到索引1處的區域性變數列表中。從這兩條il語句的用途可以說明is和as操作符的部分關係。

2、as 運算子只執行引用轉換和裝箱轉換,無法執行其他轉換。下面的**是錯誤的:

object _object = null;

student _s = _object as student;

//試圖將乙個物件轉換成委託

testdelegate test = _s as testdelegate;

**********==== end

前置操作符和後置操作符

操作符可以被過載 全域性函式和成員函式均可以進行過載 過載前置 操作符不需要額外的引數 過載後置 操作符需要乙個int型別的佔位引數 來看乙個例子 include include using namespace std class test intvalue test operator test o...

關係操作符和邏輯操作符

關係操作符和邏輯操作符使用算術或指標型別的運算元,並返回bool 型別的值。操作符功能用法 logical not 邏輯非 expr less than 小於 expr expr less than or equal 小於等於 expr expr greater than 大於 expr expr ...

MySQL的and操作符和or操作符

有時對where的要篩選的列不止乙個時,那麼就用到了and操作符和or操作符,and操作符顧名思義的意思是 並且 而or操作符的意思是 或者 比如以部門員工表為例 查詢部門編號為d001並且入職日期為 1985 02 02的員工編號,那麼就要用到and操作符 那如果是查詢部門編號為d001或者入職日...