日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

IS 和AS

發(fā)布時(shí)間:2025/4/16 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IS 和AS 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.cnblogs.com/haiyang1985/archive/2009/03/12/1410023.html

1一. as 運(yùn)算符用于在兼容的引用類型之間執(zhí)行某些類型的轉(zhuǎn)換。

static?void?Main(string[]?args)
{
? ??

object[] obj = new object[3];
obj[0] = 10;
Type t = obj[0].GetType();
obj[1] = "hello";
obj[2] = 10;

for (int i = 0; i < obj.Length; i++)
{
string s = obj[i] as string;
if (s != null)
{
Console.WriteLine(s);
}
else
{
Console.WriteLine("not a string");
}
}

Console.ReadLine();


}

結(jié)果:

not a string

hello

not a string

==============================================================================

class Base

{

public override string ToString()

{

return "Base";

}

}

class Derived : Base

{ }

?

class Program

{

static void Main()

{

?

Derived d = new Derived();

?

Base b = d as Base;

if (b != null)

{

Console.WriteLine(b.ToString());

}

?

}

}

對(duì)于繼承類,允許把子類轉(zhuǎn)換成父類,但是不可以把父類轉(zhuǎn)換成子類,不同類之間,值類型不可轉(zhuǎn)換。

安全性:

as操作符不會(huì)做過(guò)的轉(zhuǎn)換操作,當(dāng)需要轉(zhuǎn)化對(duì)象的類型屬于轉(zhuǎn)換目標(biāo)類型或者轉(zhuǎn)換目標(biāo)類型的派生類型時(shí),那么此轉(zhuǎn)換操作才能成功,而且并不產(chǎn)生新的對(duì)象【當(dāng)不成功的時(shí)候,會(huì)返回null】。因此用as進(jìn)行類型轉(zhuǎn)換是安全的。

效率:

當(dāng)用as操作符進(jìn)行類型轉(zhuǎn)換的時(shí)候,首先判斷當(dāng)前對(duì)象的類型,當(dāng)類型滿足要求后才進(jìn)行轉(zhuǎn)換,而傳統(tǒng)的類型轉(zhuǎn)換方式,是用當(dāng)前對(duì)象直接去轉(zhuǎn)換,而且為了保護(hù)轉(zhuǎn)換成功,要加上try-catch,所以,相對(duì)來(lái)說(shuō),as效率高點(diǎn)。
需要注意的是,不管是傳統(tǒng)的還是as操作符進(jìn)行類型轉(zhuǎn)換之后,在使用之前,需要進(jìn)行判斷轉(zhuǎn)換是否成功,如下:

?
1 2 3 4 if(newValue != null) { //Work with the object named “newValue“ }

===================================================================================

http://www.cnblogs.com/cgli/archive/2011/05/10/2041731.html

is檢查一個(gè)對(duì)象是否兼容于指定的類型,并返回一個(gè)Boolean值:true或者fasle。注意,is操作符永遠(yuǎn)不會(huì)拋出異常,請(qǐng)看以下示例:

ClassA

{

....

}

Object o=new Object();

Boolean b1=(o is Object); //b1為true.

Boolean b2=(o is ClassA) ; b2為false.

如果對(duì)象引用是null,is操作符總是返回false,因?yàn)闆](méi)有可檢查的其類型的對(duì)象。

?is 操作符通常像下面這樣使用:

if(obj is ClassA)

{

??? ClassA a=(ClassA) obj;

?? ...

?}

?在這一段代碼中,CLR實(shí)際會(huì)檢查兩次對(duì)象類型。is操作符首先核實(shí)obj是否兼容于ClassA 類型。如果是,那么在if語(yǔ)句內(nèi)部執(zhí)行類型轉(zhuǎn)換時(shí),CLR再次核實(shí)obj是否引用一個(gè)ClassA。CLR的類型檢查增強(qiáng)了安全性,但也會(huì)對(duì)性能造成一定的影響。這是因?yàn)镃LR首先必須判斷(obj)引用的對(duì)象的實(shí)際類型。然后CLR必須遍歷繼承層次結(jié)構(gòu),用每個(gè)基類型去核對(duì)指定的類型(ClassA)。

?

轉(zhuǎn)載于:https://www.cnblogs.com/ZkbFighting/p/7601020.html

總結(jié)

以上是生活随笔為你收集整理的IS 和AS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。