程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 第一章 C# is和as,

第一章 C# is和as,

編輯:關於.NET

第一章 C# is和as,


一、明確兩個基本概念

     隱式轉換:

      a、對於值類型,低精度=>高精度。eg:int=>long

      b、對於引用類型,子類向祖宗類轉換過程。eg:對象=>Object

     顯式轉換:顯示轉換是隱式轉換的逆過程。

     對於c#,與類型轉換相關的其他術語,就不在此處提及,如:

  • 拆箱與裝箱
  • GetType獲取對象類型( System.Object.ReferenceEquals(Object obj1,Object obj2))
  • 基本類型:Convert類;
  • Parse();
  • ToString();

二、為什麼要用is和As

     在類型轉換時,對於事先並不知對象的具體類型時,為了避免轉換失敗造成系統崩潰問題,我們一般在容易出現問題或者有可能出現問題(當時並不能確定是否會發生異常)的地方,用try......catch.....finally....來規避程序崩潰等問題,當然這樣做也方便測試,這就是is和as的功能之一,除此之外,對系統進行性能優化時,能不用try....catch....就盡量不用,is和as滿足這一原則。

三、示例

  1、is用法

      定義:判斷某個對象是否兼容另一個對象。永遠不會拋出異常。

      返回值:布爾值。若兼容,則返回true;若不兼容,則為false;若對象為空null,則為false;

例1:兼容
Label lbl = new Label();
if (lbl is Object)
{
Object objLbl = (Object)lbl;
Response.Write("true");
}
else
{
Response.Write("false");
}

測試結果為:true

  

例2:不兼容
Label lbl = new Label();
if (lbl is TextBox)
   {
       Response.Write("true");
    }
else
    {
        Response.Write("false");
     }
測試結果為:false

  

例3:對象為NULL
Label lbl = null;
if (lbl is Object)
  {
      Response.Write("true");
  }
else
  {
      Response.Write("false");
   }
測試結果:false

  

 is一般結構:

if (A is B)//第一次兼容檢查
    {
       B  b=(B)A;//第二次兼容檢查
    }A

分析:對於is,CLR會進行2次兼容性檢查,第一次判斷A is B,若為真,則再次進行兼容檢查B b=(B)A;

   

 

2、as用法 

      定義:判斷某個對象是否兼容另一個對象。永遠不會拋出異常。

      返回值:若兼容,則返回結果;若不兼容,則返回null;若為空,則返回null。

 

 例1:兼容
Label lbl1 = new Label(); Label lbl2 =lbl1 as Label; Response.Write(lbl2);//System.Web.UI.WebControls.Label

  

 例2:不兼容
string str = "AS轉換"; Label lbl = str as Label;//顯示編譯錯誤 Response.Write(lbl);

  

例3:對象為Null
 Object obj = null;
 Label lbl = obj as Label;
 Response.Write(lbl);//null

  

四、比較

      由於CLR對is會進行兩次檢查,對as只進行一次檢查,故as效率要高一些,一般情況下,使用as而不使用is.

      參考網址:     http://developer.51cto.com/art/200908/145432.htm;http://developer.51cto.com/art/200908/145432.htm

    

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved