欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中AS和IS關(guān)鍵字的用法

 更新時間:2016年03月15日 10:13:39   作者:那年的冬天  
這篇文章主要介紹了C#中AS和IS關(guān)鍵字的用法的相關(guān)資料,需要的朋友可以參考下

在程序中,進行類型轉(zhuǎn)換是常見的事,C#支持基本的強制類型轉(zhuǎn)換方法,例如:

Object obj1 = new NewType();
NewType newValue = (NewType)obj1;

這樣強制轉(zhuǎn)換的時候,這個過程是不安全的,因此需要用try-catch語句進行保護,這樣一來,比較安全的代碼方式應(yīng)如下所示:

Object obj1 = new NewType();
NewType newValue = null;
try
{
newValue = (NewType)obj1;
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}

但是上面的寫法在C#中已是過時的寫法,也是比較低效的寫法,比較高效且時尚的寫法是用as操作符,如下:

Object obj1 = new NewType();
NewTYpe newValue = obj1 as NewType

安全性:

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

效率:

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

if(newValue != null)
{
//Work with the object named “newValue“
}

但是,使用as操作符要注意以下幾點:

1、不用在類型之間進行類型轉(zhuǎn)化,即如下編寫就會出現(xiàn)編譯錯誤。

NewType newValue = new NewType();
NewTYpe1 newValue = newValue as NewTYpe1;

2、不能應(yīng)用在值類型數(shù)據(jù),即不能如下寫(也會出現(xiàn)編譯錯誤)

Object obj1 = 11;
int nValue = obj1 as int;

對于1.,可以用傳統(tǒng)的類型轉(zhuǎn)換方式完成:

NewTypeOne newTestOne = new NewTypeOne();
NewTypeTwo newTestTwo = (NewTypeTwo)newTestOne;

要想使上面的操作正確完成,在原有類型中增加類型轉(zhuǎn)換操作符函數(shù),即需要完成類似如下的代碼:

public calss NewTypeOne
{
public static explicit operator NewTypeTwo( NewTypeOne obj1)
{
//Convert object into new type
}
}

對于2,在C#中可以使用is操作符,再加上老式的類型轉(zhuǎn)換操作,就可以安全完成轉(zhuǎn)換,要完成如上操作,正確的寫法如下:

Object obj1 = 11;
if(objTest is int )
{
int nValue = (int)obj1;
}

在C#中提供的很好的類型轉(zhuǎn)換方式總結(jié)為:

Object => 已知引用類型——使用as操作符完成;

Object => 已知值類型——先使用is操作符來進行判斷,再用類型強轉(zhuǎn)換方式進行轉(zhuǎn)換;

已知引用類型之間轉(zhuǎn)換——首先需要相應(yīng)類型提供轉(zhuǎn)換函數(shù),再用類型強轉(zhuǎn)換方式進行轉(zhuǎn)換;

已知值類型之間轉(zhuǎn)換——最好使用系統(tǒng)提供的Conver類所涉及的靜態(tài)方法。

下面給大家介紹下C#中關(guān)于as關(guān)鍵字的使用

我們在實際編碼中有時會用到as關(guān)鍵字來將對象轉(zhuǎn)換為指定類型,與is類型不同的是,is關(guān)鍵字是用于檢查對象是否與給定類型兼容,如果兼容就返回true,如果不兼容就返回false。而as關(guān)鍵字會直接進行類型轉(zhuǎn)換,如果轉(zhuǎn)換成功會返回轉(zhuǎn)換后的對象,如果轉(zhuǎn)換不成功則不會拋出異常而是返回null。

  下面我們創(chuàng)建一個簡單的用例來闡述as的用法:

1.以visual studio2015為開發(fā)環(huán)境,新建一個window Form窗體應(yīng)用程序,并將其命名為TransForm.

2.向窗體中添加一個button控件,用于類型轉(zhuǎn)換,再添加一個GroupBox控件,向此控件中添加三個RadioButton控件,分別用于選擇哪種類型。

3.詳細代碼如下:

private void btn_Get_Checked(object sender,EventArgs e)
{
if(rbtn_object.checked)
{
using (FileStream P_filestream=new FileStream(@'d:\log.txt',System.IO.FileMode.Create))
{
object p_Object = P_filestream as object;
if(p_Object!=null)
{
Message.Box("轉(zhuǎn)換Obejct成功","提示");
}
else
{
Message.Box("轉(zhuǎn)換Obejct失敗","提示!")
}
}
if(rbtn_stream.checked)
{
using (FileStream P_filestream=new FileStream(@'d:\log.txt',System.IO.FileMode.Create))
{
obejct p_object=P_filestream;
Stream P_Stream = p_objec as Stream;
if(P_Stream!=null)
{
Message.Box("轉(zhuǎn)換Stream成功","提示");
}
else
{
Message.Box("轉(zhuǎn)換Stream失敗","提示!")
}
}
}
}

相關(guān)文章

  • C#中的除法運算符與VB.NET中的除法運算符

    C#中的除法運算符與VB.NET中的除法運算符

    這篇文章主要介紹了C#中的除法運算符與VB.NET中的除法運算符,需要的朋友可以參考下
    2014-10-10
  • unity制作瞄準(zhǔn)鏡效果

    unity制作瞄準(zhǔn)鏡效果

    這篇文章主要為大家詳細介紹了unity制作瞄準(zhǔn)鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 淺析C# 狀態(tài)機Stateless

    淺析C# 狀態(tài)機Stateless

    這篇文章主要介紹了C# 狀態(tài)機Stateless的的相關(guān)資料,文中講解非常詳細,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#在MEF框架中實現(xiàn)延遲加載部件

    C#在MEF框架中實現(xiàn)延遲加載部件

    這篇文章介紹了C#在MEF框架中實現(xiàn)延遲加載部件的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C# SQlite操作方法小結(jié)

    C# SQlite操作方法小結(jié)

    這篇文章主要介紹了C# SQlite操作方法,較為詳細的講述了SQLite的下載與C#針對SQLite的連接、創(chuàng)建、與執(zhí)行SQL語句等操作相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • C#調(diào)用百度地圖API根據(jù)地名獲取經(jīng)緯度geocoding

    C#調(diào)用百度地圖API根據(jù)地名獲取經(jīng)緯度geocoding

    本文主要介紹了C#調(diào)用百度地圖API根據(jù)地名獲取經(jīng)緯度geocoding,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 最新評論