型別安全是
clr中非常重要的乙個特性,由於在
.net
中所有的型別繼承自
system.object
,而object
物件又有
gettype()
,並且這個方法是非虛方法,我們是不能重寫的。這樣就充分的保證了物件的型別安全,也就能輕而易舉的獲取物件的精確型別,討論is和
as關鍵字的使用,首先要深刻的理解
.net
的型別轉換,is和
as關鍵字的作用就是方便我們進行型別轉換!
型別轉換
將某乙個型別轉換成其他的型別是我們經常要做的事情,型別轉換總的概括起來可以非常兩種,就是隱式轉換和顯示轉換。
l隱式轉換:將某乙個物件轉換成它的基型別,這種轉換在
c#中被認為是安全,所以不需要任何特殊的操作。稱為隱式轉換。
l顯示轉換:相反,在將任何物件轉換成它的派生型別時,
c#要求使用特殊的語法,進行顯示的轉換,因為這種轉換可能伴隨有錯誤發生。
下面通過**的形式講解上面的兩個概念,儘管有些過於簡單了。
//student
型別隱含的繼承自system.object型別
public
class
student
//顯示轉換,因為需要將子類的例項轉換成它的父類
public
class
teacher:student
public
class
program
}在執行時,clr會檢查操作,以確
保會將物件總是轉換成它的實際型別,獲取它的基型別。這正是.net框架中的型別安全,也是.net框架中非常重要的一部分
,也是我們日常程式設計中需要經常使用的。
is和as操作符的使用
c#提供了is和as操作符進行型別轉換,他們有個共同的特點:就是永遠不會丟擲異常!lis
:檢查物件和給定的型別是否相容,如果不相容或者引用的物件為空,就返回false,如果型別相容就返回true。las
:也是檢查物件和給定的型別是否相容,和is不相同的是它在轉換失敗時,返回的是null!後面的**中大家可以體會到,as的效能要比is操作符稍好一些!
下面還是通過**的形式講解上面的兩個概念。
teacher teacher = new
teacher();
//b1
為true
system.boolean b1 = (teacher is
student);
//b2
為false
student student = new
student();
system.boolean b2 = (student is
teacher);
下面是is操作符的典型用法,
//判斷student能夠轉換成teacher型別的物件
if (student is
teacher)
在上面的**中大家可以看到,要想使用轉後的例項,clr實際上進行了兩次檢查操作!is操作符首先檢查student所引用的物件是否和teacher相容,如果相容,在if語句內部,clr在進行轉換時又會檢查student是否是乙個teacher引用。
下面是as操作符的典型使用方法,大家可以看到,as操作符提供了更好的效能!
//clr
檢查student所引用的物件是否和teacher相容!
teacher teacher = student as
teacher;
if (teacher != null)
注意在as操作符的轉換中clr只檢查了一次,而is則檢查了兩次,效能獲得了少許的提高!使用as操作符一定要進行非空型別檢查,否則會丟擲system.nullreferenceexception
異常!千言萬語歸結為一句話,is用於判斷,as用於轉換!
MySQL的and操作符和or操作符
有時對where的要篩選的列不止乙個時,那麼就用到了and操作符和or操作符,and操作符顧名思義的意思是 並且 而or操作符的意思是 或者 比如以部門員工表為例 查詢部門編號為d001並且入職日期為 1985 02 02的員工編號,那麼就要用到and操作符 那如果是查詢部門編號為d001或者入職日...
指標用操作符 和 ,引用使用操作符
指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但是...
操作符使用
1.寫乙個函式返回引數二進位制中 1 的個數 比如 15 0000 1111 4 個 1 程式原型 int count one bits unsigned int value include include pragma warning disable 4996 方法一 int count one ...