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

C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三

 更新時間:2015年10月12日 11:01:42   投稿:lijiao  
C#語言類型系統(tǒng)提出的一個核心概念裝箱(boxing)拆箱(unboxing)。裝箱和取消裝箱的概念是C#的類型系統(tǒng)的核心。它在“值類型”和“引用類型”之間的架起了一座橋梁,使得任何“值類型”的值都可以轉(zhuǎn)換為object類型的值,反過來轉(zhuǎn)換也可以。

了解了數(shù)據(jù)類型與變量的基本概念之后,我們來討論數(shù)據(jù)類型的轉(zhuǎn)換與裝箱與拆箱!裝箱和取消裝箱使我們能夠統(tǒng)一地來考察類型系統(tǒng),其中任何類型的值最終都可以按對象處理。
一、數(shù)據(jù)類型轉(zhuǎn)換
在編程時 我們有時候會遇到將一個類型的變量轉(zhuǎn)換成另一種數(shù)據(jù)類型,我們稱它為數(shù)據(jù)類型的轉(zhuǎn)換,C#數(shù)據(jù)類型的轉(zhuǎn)換有兩種方式如下:
1.默認安全的數(shù)據(jù)類型轉(zhuǎn)換
默認安全的數(shù)據(jù)類型轉(zhuǎn)換:我們稱之為 隱式的數(shù)據(jù)類型轉(zhuǎn)換,什么是隱式的數(shù)據(jù)類型轉(zhuǎn)換?隱式的數(shù)據(jù)類型轉(zhuǎn)換就是數(shù)據(jù)類型的低范圍(參考C#數(shù)據(jù)類型與變量一中的數(shù)據(jù)類型的范圍)向高范圍的數(shù)據(jù)類型的轉(zhuǎn)換。例如:

int a = 200; //int 范圍是 -2147483648~2147483647 
long b = a; //long 范圍是 -9223372036854775808~9223372036854775807 表示的整數(shù)范圍更大 并且這個范圍包含200
//所以我們認為這兩個數(shù)據(jù)類型轉(zhuǎn)換是默認合法的也稱隱式數(shù)據(jù)類型轉(zhuǎn)換
Console.WriteLine("b = "+b.ToString());

運行結(jié)果當(dāng)時會輸出:“b = 200”這段話啦!

2.強制的數(shù)據(jù)類型轉(zhuǎn)換
了解隱式數(shù)據(jù)類型的轉(zhuǎn)換后,我們在來了解下強制的類型轉(zhuǎn)換,強制類型轉(zhuǎn)換就是,當(dāng)不滿足隱式數(shù)據(jù)類型轉(zhuǎn)換的規(guī)則時,的一種數(shù)據(jù)類型轉(zhuǎn)換的方法,強制數(shù)據(jù)類型轉(zhuǎn)換必然會引發(fā)一些錯誤,例如:
將高范圍數(shù)據(jù)類型(簡稱高)轉(zhuǎn)換低范圍數(shù)據(jù)類型(簡稱低)時,那么當(dāng)“高”變量的值,超出了“低”數(shù)據(jù)類型的范圍時,我們簡稱數(shù)據(jù)類型溢出。代碼如下:

long a = 3333333333; //long 范圍是 -9223372036854775808~9223372036854775807 ->3333333333在這個范圍中合法
int b = (int)a; //int 范圍是 -2147483648~2147483647 -> 3333333333 超出了這個范圍 所以導(dǎo)致數(shù)據(jù)類型溢出
Console.WriteLine("a =" + a.ToString());
Console.WriteLine("b ="+b.ToString());//類型溢出這里會輸出一個非常大的負數(shù)

輸出結(jié)果如下:

二、裝箱與拆箱
理解完基本數(shù)據(jù)類型的轉(zhuǎn)換后我們來看一下值類型與引用類型之間的轉(zhuǎn)換,我們稱為裝箱與拆箱。
1.裝箱
裝箱就將值類型轉(zhuǎn)換成引用類型:

int a = 10;
object obj = a; //將值類型轉(zhuǎn)換引用類型,裝箱操作

在裝箱操作時,運行時會在托管堆上分配一個空間,存放a 中的10,并標(biāo)志這塊空間的裝箱類型是int。
如圖:

2.拆箱
那拆箱就跟裝箱相反,就是將引用類型還原會值類型。

int a = 10;
object obj = a; //將值類型轉(zhuǎn)換引用類型 裝箱
int b = (int)obj; //將引用類型轉(zhuǎn)換為值類型 拆箱

當(dāng)拆箱時我們會將推中的10強制類型轉(zhuǎn)換放到棧空間中(圖中代表int b)。
如圖

3.裝箱與拆箱的作用
當(dāng)我需要顯示的方法,分別來顯示 int float double類型的值到控制臺。一般我們的設(shè)計方法如下:

class MyProgram
{
  //用來打印int類型的值
  public static void ShowInt(int a)
  {
    Console.WriteLine(" a ="+a.ToString());
  }
  
  //用來打印float類型的值
  public static void ShowFloat(float a)
  {
    Console.WriteLine(" a ="+a.ToString());
  }
  
  //用來打印double類型的值
  public static void ShowDouble(double a)
  {
    Console.WriteLine(" a ="+a.ToString());
  }
  
  static void Main(string[] args)
  {
    int a = 10;
    ShowInt(a);
  
    float b = 2.2;
    ShowFloat(b);
  
    double c = 2.22;
    ShowDouble(c);
  }
}

那么我們思考一下,這個時候我需要在支持 string , short,char等等的類型顯示的時候,我們是不是需要對每一個類型都定義一個顯示的方法? 此時我們在看看引入了裝箱與拆箱概念的方法設(shè)計:

class MyProgram
{
  //將參數(shù)類型改為object
  public static void ShowObject(object obj)
  {
    Console.WriteLine("obj ="+obj.ToString());
  }
  
  
  static void Main(string[] args)
  {
    int a = 10;
    ShowObject(a); //int a 被裝箱
  
    float b = 2.2;//float b 被裝箱
    ShowObject(b);
  
    double c = 2.22;//double c 被裝箱
    ShowObject(c);
  }
}

這樣我們將來不管需要擴展多少數(shù)據(jù)類型我們這個方法都可以滿足。
裝箱用于在垃圾回收堆中存儲值類型。裝箱是值類型到 object 類型或到此值類型所實現(xiàn)的任何接口類型的隱式轉(zhuǎn)換。對值類型裝箱會在堆中分配一個對象實例,并將該值復(fù)制到新的對象中。
關(guān)于C#數(shù)據(jù)類型與變量就介紹到這,希望上面三篇文章對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • C#使用linq語句查詢數(shù)組中以特定字符開頭元素的方法

    C#使用linq語句查詢數(shù)組中以特定字符開頭元素的方法

    這篇文章主要介紹了C#使用linq語句查詢數(shù)組中以特定字符開頭元素的方法,涉及C#使用linq進行查詢的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C#實現(xiàn)文件上傳以及多文件上傳功能

    C#實現(xiàn)文件上傳以及多文件上傳功能

    這篇文章主要為大家詳細介紹了C#實現(xiàn)文件上傳以及多文件上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • c# openxml 刪除xlsx、xls的外鏈示例代碼

    c# openxml 刪除xlsx、xls的外鏈示例代碼

    要刪除一個 Excel 文件(.xlsx)中的外部鏈接(external links),你可以使用 OpenXML SDK,本文演示如何使用 OpenXML SDK 刪除外部鏈接,感興趣的朋友一起看看吧
    2024-01-01
  • C#瀏覽器提示跨域問題解決方案

    C#瀏覽器提示跨域問題解決方案

    這篇文章主要介紹了C#瀏覽器提示跨域問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • C#實現(xiàn)將千分位字符串轉(zhuǎn)換成數(shù)字的方法

    C#實現(xiàn)將千分位字符串轉(zhuǎn)換成數(shù)字的方法

    這篇文章主要介紹了C#實現(xiàn)將千分位字符串轉(zhuǎn)換成數(shù)字的方法,很適合初學(xué)者更好的理解C#字符串原理,需要的朋友可以參考下
    2014-08-08
  • Unity的BuildPlayerProcessor實用案例深入解析

    Unity的BuildPlayerProcessor實用案例深入解析

    這篇文章主要為大家介紹了Unity的BuildPlayerProcessor實用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • C#處理猜拳問題的簡單實例(非窗體)

    C#處理猜拳問題的簡單實例(非窗體)

    下面小編就為大家?guī)硪黄狢#處理猜拳問題的簡單實例(非窗體)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • C#線程開發(fā)之System.Thread類詳解

    C#線程開發(fā)之System.Thread類詳解

    本文詳細講解了C#線程開發(fā)之System.Thread類,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#將Excel中的數(shù)據(jù)轉(zhuǎn)換成DataSet

    C#將Excel中的數(shù)據(jù)轉(zhuǎn)換成DataSet

    這篇文章主要介紹了C#將Excel中的數(shù)據(jù)轉(zhuǎn)換成DataSet的方法,非常簡單實用,從本人項目中提取出來的,推薦給大家,希望對大家學(xué)習(xí)C#能夠有所幫助。
    2015-03-03
  • c# WPF中System.Windows.Interactivity的使用

    c# WPF中System.Windows.Interactivity的使用

    這篇文章主要介紹了c# WPF中System.Windows.Interactivity的使用,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03

最新評論