c 中 is 和 as 關鍵字的區別

2021-05-22 17:25:28 字數 3322 閱讀 9074

is

關鍵字用於檢查物件是否與給定型別相容。注意了,這裡的

is並不是「是

」的意思,而是「相容

」。也就是說,如果被檢查物件能夠強制轉換成給定型別並不發生異常,那麼表示它們型別相容。如果所提供的表示式非空,並且所提供的物件可以強制轉換為所提供的型別而不會導致引發異常,則

is表示式的計算結果將是

true

;否則,發生異常時

is表示式將返回

false。is

的使用方式:

if(obj

ismyobject)

如果已知表示式將始終是

true

或始終是

false

,則is

關鍵字將導致編譯時警告,但是,通常在執行時才計算型別相容性。

注意,is

運算子只考慮引用轉換裝箱轉換取消裝箱轉換不考慮其他轉換,如使用者定義的轉換。特別注意:雖然

int和

double

是型別相容的,但是使用

is運算子的結果卻是

false

,那是因為

is運算子只考慮引用轉換、裝箱轉換和拆箱轉換。在

is 運算子的左側不允許使用匿名方法。

引用轉換

is作用於物件引用時,將判斷被檢查物件變數是否是給定型別的派生型別。如果是派生型別,返回

true

;否則返回

false

。例如:

list

<

int> list =

newlist<

int>();

if(list

isienumerable

) //這裡將返回true。因為list實現了ienumerable介面。

裝箱轉換

inti = 5;

if(i

isint32) //

這裡返回

true。if

(i is

int16) //

這裡返回

false

,因為int

型別的包裝型別是

int32

,而不是

int16

拆箱轉換

int32 int32 =

newint32();

if(int32

is int

) //

這裡返回

true。if

(int32

is long

) //

這裡返回

false

,因為int32

型別的原始型別是

int,而不是

long

注意

1.雖然

point

與pointf

、size

與sizef

、rectangle

與rectanglef

可以相互轉換,但是使用

is運算子的結果都是返回

false

,因為is

運算子不支援使用者自定義的型別轉換檢測。

2.int

、long

、double

這些原始型別、數值型別雖然可以進行相互間的強制轉換,但是使用

is運算子的結果都是返回

false

,也是因為

is運算子不支援這種原始型別轉換的檢測。

inti = 6;

long

l = 100;

if(i is

long

) //

返回false

if(i is

double

) //

返回false

if(l is

double

) //

返回false

if(l is

int) //

返回false

c#中as

和is關鍵字

. as

運算子用於在相容的引用型別之間執行某些型別的轉換。例如:

static

void

main(

string

args)

else

}console.readline();}

結果:not a string

hello

not a string

class

base

}class

derived : base

class

program}}

對於繼承類,允許把子類轉換成父類,但是不可以把父類轉換成子類,不同類之間,值型別不可轉換。

二.is

檢查物件是否與給定型別相容。

例如,下面的**可以確定物件是否為

myobject

型別的乙個例項,或者物件是否為從

myobject

派生的乙個型別:

複製**

if (obj is myobject)

如果所提供的表示式非空,並且所提供的物件可以強制轉換為所提供的型別而不會導致引發異常,則

is表示式的計算結果將是

true

。如果已知表示式將始終是

true

或始終是

false

,則is

關鍵字將導致編譯時警告,但是,通常在執行時才計算型別相容性。

不能過載

is運算子。

請注意,

is運算子只考慮引用轉換、裝箱轉換和取消裝箱轉換。不考慮其他轉換,如使用者定義的轉換。在is

運算子的左側不允許使用匿名方法。

lambda

表示式屬於例外。

class

myquicksort

else

console.readline();}}

class

class1

}class

class2:class1

結果:yes

c 中is和as關鍵字的區別

關於型別的判斷和轉換有is和 as這2個操作符。具體區別和用法如下 is就是處於對型別的判斷。返回 true 和false 如果乙個物件是某個型別或是其父型別的話就返回為 true 否則的話就會返回為 false 另外is 操作符永遠不會丟擲異常。如下 system.boolean b1 o iss...

c 中 is 和 as 關鍵字的區別

is 關鍵字用於檢查物件是否與給定型別相容。注意了,這裡的 is並不是 是 的意思,而是 相容 也就是說,如果被檢查物件能夠強制轉換成給定型別並不發生異常,那麼表示它們型別相容。如果所提供的表示式非空,並且所提供的物件可以強制轉換為所提供的型別而不會導致引發異常,則 is表示式的計算結果將是 tru...

C 中as和is關鍵字

一.as 運算子用於在相容的引用型別之間執行某些型別的轉換。例如 static void main string args else console.readline 結果 not a string hello not a string class base class derived base c...