C# Keywords - is

 記錄一下在平常開發過程當中遇到的一些C# 基礎編程的知識!但願之後能用的着。知識是在日常的開發過程當中去學到的。只有用到了,你才能深刻的理解它,並用好它。express

 本資料來源於:MSND下面是一些相關的code 和 說明編程

 C# is 關鍵字: 檢查對象是否與給定類型相互兼容。 ide

 

  C# Keywords - is 的使用ui

例如,下面的代碼能夠肯定 obj對象是否爲 MyObject 類型的一個實例,或者obj對象是否爲從 MyObject 派生的一個類型:lua

 
 這裏有三種狀況:
一、obj 對象就是指定類型的實例。 因此表達式是true
二、obj 對象是指定類型的基類,也就是MyObject : obj    表達式爲 true
三、obj 對象與指定類型不兼容,那麼表達式返回的是false.
if (obj is MyObject)
{
}

詳細說明:

若是所提供的表達式非空,而且所提供的對象能夠強制轉換爲所提供的類型而不會致使引起異常,則 is 表達式的計算結果將是 true。spa

若是已知表達式將始終是 true 或始終是 false,則 is 關鍵字將致使編譯時警告,可是,一般在運行時才計算類型兼容性。3d

不能重載 is 運算符。code

請注意,is 運算符只考慮引用轉換、裝箱轉換和取消裝箱轉換。 不考慮其餘轉換,如用戶定義的轉換。對象

在 is 運算符的左側不容許使用匿名方法。 lambda 表達式屬於例外。繼承

   示例:

class Class1 {}
class Class2 {}
class Class3 : Class2 { }

class IsTest
{
    static void Test(object o)
    {
        Class1 a;
        Class2 b;

        if (o is Class1)
        {
            Console.WriteLine("o is Class1");
            a = (Class1)o;
            // Do something with "a."
        }
        else if (o is Class2)
        {
            Console.WriteLine("o is Class2");
            b = (Class2)o;
            // Do something with "b."
        }

        else
        {
            Console.WriteLine("o is neither Class1 nor Class2.");
        }
    }
    static void Main()
    {
        Class1 c1 = new Class1();
        Class2 c2 = new Class2();
        Class3 c3 = new Class3();
        Test(c1);
        Test(c2);
        Test(c3);  // 由於class3 繼承class2 ,或這麼理解: class2 是class3的基類。 在用is 關鍵字的時候。它會返回true.
        Test("a string");
    }
}
/*
Output:
o is Class1
o is Class2
o is Class2
o is neither Class1 nor Class2.
*/
相關文章
相關標籤/搜索