IS 和AS
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é)
- 上一篇: 将CSS放头部,JS放底部,可以提高页面
- 下一篇: 如何更改github工程的语言属性