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

詳解c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換

 更新時(shí)間:2020年10月13日 10:41:11   作者:olprod  
這篇文章主要介紹了c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下

由于 C# 是在編譯時(shí)靜態(tài)類型化的,因此變量在聲明后就無法再次聲明,或無法分配另一種類型的值,除非該類型可以隱式轉(zhuǎn)換為變量的類型。 例如,string 無法隱式轉(zhuǎn)換為 int。 因此,在將 i 聲明為 int 后,無法將字符串“Hello”分配給它,如以下代碼所示:

int i;

// error CS0029: Cannot implicitly convert type 'string' to 'int'
i = "Hello";

但有時(shí)可能需要將值復(fù)制到其他類型的變量或方法參數(shù)中。 例如,可能需要將一個(gè)整數(shù)變量傳遞給參數(shù)類型化為 double 的方法。 或者可能需要將類變量分配給接口類型的變量。 這些類型的操作稱為類型轉(zhuǎn)換。 在 C# 中,可以執(zhí)行以下幾種類型的轉(zhuǎn)換:

  • 隱式轉(zhuǎn)換:由于這種轉(zhuǎn)換始終會(huì)成功且不會(huì)導(dǎo)致數(shù)據(jù)丟失,因此無需使用任何特殊語法。 示例包括從較小整數(shù)類型到較大整數(shù)類型的轉(zhuǎn)換以及從派生類到基類的轉(zhuǎn)換。
  • 顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換) :必須使用強(qiáng)制轉(zhuǎn)換表達(dá)式,才能執(zhí)行顯式轉(zhuǎn)換。 在轉(zhuǎn)換中可能丟失信息時(shí)或在出于其他原因轉(zhuǎn)換可能不成功時(shí),必須進(jìn)行強(qiáng)制轉(zhuǎn)換。 典型的示例包括從數(shù)值到精度較低或范圍較小的類型的轉(zhuǎn)換和從基類實(shí)例到派生類的轉(zhuǎn)換。
  • 用戶定義的轉(zhuǎn)換:用戶定義的轉(zhuǎn)換是使用特殊方法執(zhí)行,這些方法可定義為在沒有基類和派生類關(guān)系的自定義類型之間啟用顯式轉(zhuǎn)換和隱式轉(zhuǎn)換。
  • 使用幫助程序類進(jìn)行轉(zhuǎn)換:若要在非兼容類型(如整數(shù)和 System.DateTime 對(duì)象,或十六進(jìn)制字符串和字節(jié)數(shù)組)之間轉(zhuǎn)換,可使用 System.BitConverter 類、System.Convert 類和內(nèi)置數(shù)值類型的 Parse 方法(如 Int32.Parse)。

隱式轉(zhuǎn)換

對(duì)于內(nèi)置數(shù)值類型,如果要存儲(chǔ)的值無需截?cái)嗷蛩纳嵛迦爰纯蛇m應(yīng)變量,則可以進(jìn)行隱式轉(zhuǎn)換。 對(duì)于整型類型,這意味著源類型的范圍是目標(biāo)類型范圍的正確子集。 例如,long 類型的變量(64 位整數(shù))能夠存儲(chǔ) int(32 位整數(shù))可存儲(chǔ)的任何值。 在下面的示例中,編譯器先將右側(cè)的 num 值隱式轉(zhuǎn)換為 long 類型,再將它賦給 bigNum。

// Implicit conversion. A long can
// hold any value an int can hold, and more!
int num = 2147483647;
long bigNum = num;

有關(guān)所有隱式數(shù)值轉(zhuǎn)換的完整列表,請(qǐng)參閱內(nèi)置數(shù)值轉(zhuǎn)換一文的隱式數(shù)值轉(zhuǎn)換表部分
對(duì)于引用類型,隱式轉(zhuǎn)換始終存在于從一個(gè)類轉(zhuǎn)換為該類的任何一個(gè)直接或間接的基類或接口的情況。 由于派生類始終包含基類的所有成員,因此不必使用任何特殊語法。

Derived d = new Derived();

// Always OK.
Base b = d;

顯式轉(zhuǎn)換

但是,如果進(jìn)行轉(zhuǎn)換可能會(huì)導(dǎo)致信息丟失,則編譯器會(huì)要求執(zhí)行顯式轉(zhuǎn)換,顯式轉(zhuǎn)換也稱為強(qiáng)制轉(zhuǎn)換。 強(qiáng)制轉(zhuǎn)換是顯式告知編譯器以下信息的一種方式:你打算進(jìn)行轉(zhuǎn)換且你知道可能會(huì)發(fā)生數(shù)據(jù)丟失,或者你知道強(qiáng)制轉(zhuǎn)換有可能在運(yùn)行時(shí)失敗。 若要執(zhí)行強(qiáng)制轉(zhuǎn)換,請(qǐng)?jiān)谝D(zhuǎn)換的值或變量前面的括號(hào)中指定要強(qiáng)制轉(zhuǎn)換到的類型。 下面的程序?qū)?double 強(qiáng)制轉(zhuǎn)換為 int。如不強(qiáng)制轉(zhuǎn)換則該程序不會(huì)進(jìn)行編譯。

class Test
{
 static void Main()
 {
 double x = 1234.7;
 int a;
 // Cast double to int.
 a = (int)x;
 System.Console.WriteLine(a);
 }
}
// Output: 1234

有關(guān)支持的顯式數(shù)值轉(zhuǎn)換的完整列表,請(qǐng)參閱內(nèi)置數(shù)值轉(zhuǎn)換一文的顯式數(shù)值轉(zhuǎn)換部分。
對(duì)于引用類型,如果需要從基類型轉(zhuǎn)換為派生類型,則必須進(jìn)行顯式強(qiáng)制轉(zhuǎn)換:

// Create a new derived type.
Giraffe g = new Giraffe();

// Implicit conversion to base type is safe.
Animal a = g;

// Explicit conversion is required to cast back
// to derived type. Note: This will compile but will
// throw an exception at run time if the right-side
// object is not in fact a Giraffe.
Giraffe g2 = (Giraffe)a;

引用類型之間的強(qiáng)制轉(zhuǎn)換操作不會(huì)更改基礎(chǔ)對(duì)象的運(yùn)行時(shí)類型;它只更改用作對(duì)該對(duì)象引用的值的類型。 有關(guān)詳細(xì)信息,請(qǐng)參閱多態(tài)性

運(yùn)行時(shí)的類型轉(zhuǎn)換異常

在某些引用類型轉(zhuǎn)換中,編譯器無法確定強(qiáng)制轉(zhuǎn)換是否會(huì)有效。 正確進(jìn)行編譯的強(qiáng)制轉(zhuǎn)換操作有可能在運(yùn)行時(shí)失敗。 如下面的示例所示,類型轉(zhuǎn)換在運(yùn)行時(shí)失敗將導(dǎo)致引發(fā) InvalidCastException。

class Animal
{
 public void Eat() => System.Console.WriteLine("Eating.");

 public override string ToString() => "I am an animal.";
}

class Reptile : Animal { }
class Mammal : Animal { }

class UnSafeCast
{
 static void Main()
 {
 Test(new Mammal());

 // Keep the console window open in debug mode.
 System.Console.WriteLine("Press any key to exit.");
 System.Console.ReadKey();
 }

 static void Test(Animal a)
 {
 // System.InvalidCastException at run time
 // Unable to cast object of type 'Mammal' to type 'Reptile'
 Reptile r = (Reptile)a;
 }
}

Test 方法有一個(gè) Animal 形式參數(shù),因此,將實(shí)際參數(shù) a 顯式強(qiáng)制轉(zhuǎn)換為 Reptile 會(huì)造成危險(xiǎn)的假設(shè)。 更安全的做法是不要做出假設(shè),而是檢查類型。 C# 提供 is 運(yùn)算符,使你可以在實(shí)際執(zhí)行強(qiáng)制轉(zhuǎn)換之前測(cè)試兼容性。 有關(guān)詳細(xì)信息,請(qǐng)參閱如何使用模式匹配以及 as 和 is 運(yùn)算符安全地進(jìn)行強(qiáng)制轉(zhuǎn)換。

以上就是詳解c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#使用CancellationTokenSource 取消 Task的方法

    C#使用CancellationTokenSource 取消 Task的方法

    因?yàn)樯婕暗搅巳粘=?jīng)常會(huì)碰到的取消任務(wù)操作,本文主要介紹了C#使用CancellationTokenSource 取消 Task,文中通過代碼介紹的非常詳細(xì),感興趣的可以了解一下
    2022-02-02
  • WPF?Trigger改變屬性無效問題排查示例詳解

    WPF?Trigger改變屬性無效問題排查示例詳解

    這篇文章主要為大家介紹了WPF?Trigger改變屬性無效問題排查示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • C#設(shè)計(jì)模式之建造者模式

    C#設(shè)計(jì)模式之建造者模式

    這篇文章介紹了C#設(shè)計(jì)模式之建造者模式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Unity基于ShaderLab實(shí)現(xiàn)光照系統(tǒng)(著色器代碼實(shí)現(xiàn)小結(jié))

    Unity基于ShaderLab實(shí)現(xiàn)光照系統(tǒng)(著色器代碼實(shí)現(xiàn)小結(jié))

    這篇文章主要介紹了Unity基于ShaderLab實(shí)現(xiàn)光照系統(tǒng),主要總結(jié)unity中shaderlab的著色器代碼實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C#實(shí)現(xiàn)線性查找算法

    C#實(shí)現(xiàn)線性查找算法

    這篇文章介紹了C#實(shí)現(xiàn)線性查找的算法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • C#使用HttpClient進(jìn)行http操作方式

    C#使用HttpClient進(jìn)行http操作方式

    這篇文章主要介紹了C#使用HttpClient進(jìn)行http操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,
    2023-11-11
  • unity使用socket實(shí)現(xiàn)聊天室功能

    unity使用socket實(shí)現(xiàn)聊天室功能

    這篇文章主要為大家詳細(xì)介紹了unity使用socket實(shí)現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • C#中值類型和引用類型的區(qū)別

    C#中值類型和引用類型的區(qū)別

    這篇文章介紹了C#中值類型和引用類型的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • C#實(shí)現(xiàn)插入排序

    C#實(shí)現(xiàn)插入排序

    這篇文章介紹了C#實(shí)現(xiàn)插入排序的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • WinForm DataGridView控件隔行變色的小例子

    WinForm DataGridView控件隔行變色的小例子

    WinForm的DataGridView控件設(shè)置行的顏色
    2013-03-03

最新評(píng)論

仙桃市| 文安县| 开封市| 瓦房店市| 南靖县| 新郑市| 德安县| 万年县| 青神县| 韶山市| 乐业县| 汽车| 保亭| 精河县| 高清| 磐石市| 旅游| 鲁甸县| 潼南县| 湛江市| 黑龙江省| 永年县| 汕尾市| 曲阜市| 新干县| 安仁县| 黑山县| 南华县| 文成县| 六盘水市| 沐川县| 商城县| 石狮市| 兴海县| 唐河县| 和田县| 云霄县| 南充市| 乌海市| 宜都市| 贞丰县|