最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用is、as關鍵字以及顯式強轉(zhuǎn)實現(xiàn)引用類型轉(zhuǎn)換

 更新時間:2022年08月08日 08:54:29   作者:Darren?Ji  
這篇文章介紹了C#使用is、as關鍵字以及顯式強轉(zhuǎn)實現(xiàn)引用類型轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在C#中,當引用類型需要轉(zhuǎn)換的時候,經(jīng)常會用到關鍵字is、as以及顯式強轉(zhuǎn)。本篇來體驗這三者的用法。

先來梳理.NET引用類型轉(zhuǎn)換的"約定俗成",或者叫"慣例":

  • 子類可以隱式轉(zhuǎn)換為父類/基類,也就是"里氏替換原則"所說的:子類必須能夠替換其父類/基類。
  • 父類/基類轉(zhuǎn)換為子類時,必須進行顯式類型強轉(zhuǎn)。

子類轉(zhuǎn)換成父類

    class Program
    {
        static void Main(string[] args)
        {
            Animal animal = new Dog(){Name = "Dog",Age = 1};
            Console.WriteLine(animal.Name);
            Console.ReadKey();
        }
    }
           
    public class Animal
    {
        public string Name { get; set; }
    }

    public class Dog : Animal
    {
        public int Age { get; set; }
    }

輸出結(jié)果:Dog   

以上,體驗了子類轉(zhuǎn)換成父類,從中可以看出:子類Dog確實能替換父類Animal,換句話說,子類就是父類,子類的實例可以賦值給父類的變量,不需要as,不需要強轉(zhuǎn),一切都是隱式發(fā)生,很好地體現(xiàn)了"里氏替換原則"。

父類轉(zhuǎn)換為子類,父類變量通過子類賦值而創(chuàng)建

父類as成子類:

Animal animal = new Dog(){Name = "Dog",Age = 1};
Dog dog = animal as Dog;
Console.WriteLine(dog.Name + " " + dog.Age);
Console.ReadKey();

輸出結(jié)果:Dog 1

父類顯式強轉(zhuǎn)成子類

Animal animal = new Dog(){Name = "Dog",Age = 1};
Dog dog = (Dog)animal;
Console.WriteLine(dog.Name + " " + dog.Age);
Console.ReadKey();

輸出結(jié)果:Dog 1   

以上,不管是使用as還是顯式強轉(zhuǎn),父類都可以轉(zhuǎn)換成子類,但是有前提的:把子類實例賦值給父類變量。  

父類轉(zhuǎn)換為子類,父類變量通過自身構(gòu)造函數(shù)而創(chuàng)建

父類as成子類失?。?/p>

Animal animal = new Animal(){Name = "Sheep"};
Dog dog = animal as Dog;
Console.WriteLine(dog.Name + " " + dog.Age);
Console.ReadKey();

輸出結(jié)果:報"NullReferenceException"錯

可見,當父類變量通過自身構(gòu)造函數(shù)而創(chuàng)建時,無法將父類轉(zhuǎn)換成子類。

(1)為了避免as的時候報"NullReferenceException"錯,引入關鍵is做類型判斷:

Animal animal = new Animal(){Name = "Sheep"};
if (animal is Dog)
{
    Dog dog = animal as Dog;
    Console.WriteLine(dog.Name + " " + dog.Age);
}
else
{
    Console.WriteLine("animal不能轉(zhuǎn)換為Dog");
}
Console.ReadKey();

輸出結(jié)果:animal不能轉(zhuǎn)換為Dog

(2)用as做類型轉(zhuǎn)換的時候,如果轉(zhuǎn)換失敗,返回null。根據(jù)這點,也可以通過判斷as轉(zhuǎn)換后的返回值是否為null,來避免報錯:

Animal animal = new Animal(){Name = "Sheep"};
Dog dog = animal as Dog;
if (dog != null)
{
    Console.WriteLine(dog.Name + " " + dog.Age);
}
else
{
    Console.WriteLine("animal不能轉(zhuǎn)換為Dog");
}
Console.ReadKey();

輸出結(jié)果:animal不能轉(zhuǎn)換為Dog   

父類顯式強轉(zhuǎn)成子類失敗

Animal animal = new Animal(){Name = "Sheep"};
Dog dog = (Dog) animal;
Console.WriteLine(dog.Name + " " + dog.Age);
Console.ReadKey();

輸出結(jié)果:報"InvalidCastException"錯

可見,當父類變量通過自身構(gòu)造函數(shù)而創(chuàng)建時,無法將父類轉(zhuǎn)換成子類。

為了避免顯示強轉(zhuǎn)時報"InvalidCastException"錯,引入關鍵字is做類型判斷:

Animal animal = new Animal(){Name = "Sheep"};
if (animal is Dog)
{
    Dog dog = (Dog)animal;
    Console.WriteLine(dog.Name + " " + dog.Age);
}
else
{
    Console.WriteLine("animal不能轉(zhuǎn)換為Dog");
}
Console.ReadKey();

輸出結(jié)果:animal不能轉(zhuǎn)換為Dog

總結(jié)

  • 對于引用類型的轉(zhuǎn)換,應該考慮使用顯式強轉(zhuǎn)或as。兩者的區(qū)別在于:一旦類型無法轉(zhuǎn)換,使用顯式強轉(zhuǎn)會報錯,而使用as會返回null。
  • 為了避免顯式強轉(zhuǎn)或as所引發(fā)的報錯,應該考慮使用is來判斷類型間是否能轉(zhuǎn)換。
  • 使用as進行引用類型轉(zhuǎn)換,不僅可以用is來判斷類型間是否能轉(zhuǎn)換,還可以通過判斷as后的返回值是否為null,然后采取相應的操作。
  • 對于基本類型的轉(zhuǎn)換:使用Convert, Parse, TryParse等。

is用于判斷類型是否一致,as和顯式強轉(zhuǎn)用于類型的轉(zhuǎn)換。

到此這篇關于C#實現(xiàn)引用類型轉(zhuǎn)換的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#中DataSet、DataTable、DataRow數(shù)據(jù)的復制方法

    C#中DataSet、DataTable、DataRow數(shù)據(jù)的復制方法

    這篇文章介紹了C#中DataSet、DataTable、DataRow數(shù)據(jù)的復制方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C#圖像識別 微信跳一跳機器人

    C#圖像識別 微信跳一跳機器人

    這篇文章主要為大家詳細介紹了C#圖像識別,微信跳一跳機器人,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 淺談c#中config.exe 引發(fā)的一些問題

    淺談c#中config.exe 引發(fā)的一些問題

    下面小編就為大家分享一篇淺談c#中config.exe 引發(fā)的一些問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • C#中獲取文件大小問題

    C#中獲取文件大小問題

    這篇文章主要介紹了C#中獲取文件大小問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • c#多線程程序設計實例方法

    c#多線程程序設計實例方法

    在本篇文章里小編給大家分享了關于c#多線程程序設計實例步驟,需要的朋友們學習參考下。
    2019-02-02
  • C#中的out關鍵字用法詳解

    C#中的out關鍵字用法詳解

    在 C# 中,out 關鍵字是一個修飾符,它允許你在方法內(nèi)部創(chuàng)建一個臨時的變量,用于接收傳遞進來的參數(shù)值,并在方法執(zhí)行完畢后,將該變量的值返回給調(diào)用方法的對象,本文將給大家詳細介紹一下C#中的out關鍵字用法,需要的朋友可以參考下
    2024-02-02
  • C#使用dynamic一行代碼實現(xiàn)反射操作

    C#使用dynamic一行代碼實現(xiàn)反射操作

    dynamic的出現(xiàn)讓C#具有了弱語言類型的特性。編譯器在編譯的時候不再對類型進行檢查,編譯時默認dynamic對象支持你想要的任何特性,這篇文章主要介紹了C#用dynamic一行代碼實現(xiàn)反射操作,需要的朋友可以參考下
    2023-04-04
  • 不使用qvod播放器獲取qvod播放路徑的方法

    不使用qvod播放器獲取qvod播放路徑的方法

    這篇文章主要介紹了使用c#獲取qvod播放路徑的方法,大家參考使用吧
    2014-01-01
  • 基于WinForm+Halcon實現(xiàn)圖像縮放與交互功能

    基于WinForm+Halcon實現(xiàn)圖像縮放與交互功能

    本文主要講述在 WinForm 中結(jié)合 Halcon 實現(xiàn)圖像縮放、平移及實時顯示灰度值等交互功能,包括初始化窗口的不同方式,以及通過特定事件添加相應功能的詳細步驟和代碼示例,能提升圖像處理應用的開發(fā)效率和用戶體驗,需要的朋友可以參考下
    2025-01-01
  • C#裝箱和拆箱的原理介紹

    C#裝箱和拆箱的原理介紹

    這篇文章介紹了C#裝箱和拆箱的原理,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03

最新評論

闻喜县| 盐源县| 德兴市| 屏南县| 潞城市| 屏山县| 望江县| 红桥区| 德兴市| 旬阳县| 辽阳市| 澄迈县| 于田县| 时尚| 鲁山县| 隆德县| 宁波市| 巴东县| 湘乡市| 日照市| 广汉市| 韩城市| 永泰县| 颍上县| 中牟县| 丽水市| 江山市| 利辛县| 方山县| 玉门市| 康乐县| 阳谷县| 巴林右旗| 龙海市| 烟台市| 满洲里市| 麻阳| 游戏| 邵阳市| 铜山县| 册亨县|