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

詳解c# 強制轉換和類型轉換

 更新時間:2020年10月13日 10:41:11   作者:olprod  
這篇文章主要介紹了c# 強制轉換和類型轉換的相關資料,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下

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

int i;

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

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

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

隱式轉換

對于內置數(shù)值類型,如果要存儲的值無需截斷或四舍五入即可適應變量,則可以進行隱式轉換。 對于整型類型,這意味著源類型的范圍是目標類型范圍的正確子集。 例如,long 類型的變量(64 位整數(shù))能夠存儲 int(32 位整數(shù))可存儲的任何值。 在下面的示例中,編譯器先將右側的 num 值隱式轉換為 long 類型,再將它賦給 bigNum。

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

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

Derived d = new Derived();

// Always OK.
Base b = d;

顯式轉換

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

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

有關支持的顯式數(shù)值轉換的完整列表,請參閱內置數(shù)值轉換一文的顯式數(shù)值轉換部分。
對于引用類型,如果需要從基類型轉換為派生類型,則必須進行顯式強制轉換:

// 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;

引用類型之間的強制轉換操作不會更改基礎對象的運行時類型;它只更改用作對該對象引用的值的類型。 有關詳細信息,請參閱多態(tài)性。

運行時的類型轉換異常

在某些引用類型轉換中,編譯器無法確定強制轉換是否會有效。 正確進行編譯的強制轉換操作有可能在運行時失敗。 如下面的示例所示,類型轉換在運行時失敗將導致引發(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 方法有一個 Animal 形式參數(shù),因此,將實際參數(shù) a 顯式強制轉換為 Reptile 會造成危險的假設。 更安全的做法是不要做出假設,而是檢查類型。 C# 提供 is 運算符,使你可以在實際執(zhí)行強制轉換之前測試兼容性。 有關詳細信息,請參閱如何使用模式匹配以及 as 和 is 運算符安全地進行強制轉換

以上就是詳解c# 強制轉換和類型轉換的詳細內容,更多關于c# 強制轉換和類型轉換的資料請關注腳本之家其它相關文章!

相關文章

  • c#中DataTable轉List的2種方法示例

    c#中DataTable轉List的2種方法示例

    這篇文章主要給大家介紹了關于c#中DataTable轉List的2種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C#之泛型詳解

    C#之泛型詳解

    本文詳細講解了C#中的泛型,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#使用DoddleReport快速生成報表

    C#使用DoddleReport快速生成報表

    這篇文章介紹了C#使用DoddleReport快速生成報表的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 關于System.Convert的那些事兒

    關于System.Convert的那些事兒

    本篇文章是對System.Convert的那些事兒,進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解C#中的字符串拼接@ $

    詳解C#中的字符串拼接@ $

    這篇文章主要介紹了C#中的字符串拼接@,$的相關知識,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • c#典型工廠化實現(xiàn)實例

    c#典型工廠化實現(xiàn)實例

    c#典型工廠化實現(xiàn)實例,需要的朋友可以參考一下
    2013-03-03
  • C#操作數(shù)據(jù)庫中存取圖片文件的方法

    C#操作數(shù)據(jù)庫中存取圖片文件的方法

    這篇文章主要介紹了C#操作數(shù)據(jù)庫中存取圖片文件的方法,以實例形式分析了C#將圖片存入數(shù)據(jù)庫及從數(shù)據(jù)庫讀取圖片文件的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • C#中DataGridView導出Excel的兩種方法

    C#中DataGridView導出Excel的兩種方法

    這篇文章主要介紹了C#中DataGridView導出Excel的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C#實現(xiàn)讀取和設置文件與文件夾的權限

    C#實現(xiàn)讀取和設置文件與文件夾的權限

    這篇文章主要為大家詳細介紹了如何使用C#實現(xiàn)讀取和設置文件與文件夾的權限,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • C#線程處理系列之線程池中的I/O線程

    C#線程處理系列之線程池中的I/O線程

    這篇文章主要介紹了C#線程處理系列之線程池中的I/O線程,在這篇文章中將介紹如何用線程池中的I/O線程來執(zhí)行I/O操作,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論