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

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

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

了解了數(shù)據(jù)類型與變量的基本概念之后,我們來討論數(shù)據(jù)類型的轉(zhuǎn)換與裝箱與拆箱!裝箱和取消裝箱使我們能夠統(tǒng)一地來考察類型系統(tǒng),其中任何類型的值最終都可以按對(duì)象處理。
一、數(shù)據(jù)類型轉(zhuǎn)換
在編程時(shí) 我們有時(shí)候會(huì)遇到將一個(gè)類型的變量轉(zhuǎn)換成另一種數(shù)據(jù)類型,我們稱它為數(shù)據(jù)類型的轉(zhuǎn)換,C#數(shù)據(jù)類型的轉(zhuǎn)換有兩種方式如下:
1.默認(rèn)安全的數(shù)據(jù)類型轉(zhuǎn)換
默認(rè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ù)范圍更大 并且這個(gè)范圍包含200
//所以我們認(rèn)為這兩個(gè)數(shù)據(jù)類型轉(zhuǎn)換是默認(rèn)合法的也稱隱式數(shù)據(jù)類型轉(zhuǎn)換
Console.WriteLine("b = "+b.ToString());

運(yùn)行結(jié)果當(dāng)時(shí)會(huì)輸出:“b = 200”這段話啦!

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

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

輸出結(jié)果如下:

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

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

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

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

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

當(dāng)拆箱時(shí)我們會(huì)將推中的10強(qiáng)制類型轉(zhuǎn)換放到??臻g中(圖中代表int b)。
如圖

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

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);
  }
}

那么我們思考一下,這個(gè)時(shí)候我需要在支持 string , short,char等等的類型顯示的時(shí)候,我們是不是需要對(duì)每一個(gè)類型都定義一個(gè)顯示的方法? 此時(shí)我們?cè)诳纯匆肓搜b箱與拆箱概念的方法設(shè)計(jì):

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);
  }
}

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

相關(guān)文章

  • C# WinForm調(diào)用net core實(shí)現(xiàn)文件上傳接口

    C# WinForm調(diào)用net core實(shí)現(xiàn)文件上傳接口

    這篇文章主要為大家詳細(xì)介紹了C# WinForm如何調(diào)用net core實(shí)現(xiàn)文件上傳接口,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • C#中使用ArrayPool和MemoryPool實(shí)例

    C#中使用ArrayPool和MemoryPool實(shí)例

    對(duì)資源的可復(fù)用是提升應(yīng)用程序性能的一個(gè)非常重要的手段,比如本篇要分享的 ArrayPool 和 MemoryPool,它們就有效的減少了內(nèi)存使用和對(duì)GC的壓力,從而提升應(yīng)用程序性能。感興趣的可以了解一下
    2021-05-05
  • C# 標(biāo)準(zhǔn)事件流實(shí)例代碼

    C# 標(biāo)準(zhǔn)事件流實(shí)例代碼

    這篇文章主要介紹了C# 標(biāo)準(zhǔn)事件流的實(shí)例代碼,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 深入多線程之:內(nèi)存柵欄與volatile關(guān)鍵字的使用分析

    深入多線程之:內(nèi)存柵欄與volatile關(guān)鍵字的使用分析

    本篇文章對(duì)內(nèi)存柵欄與volatile關(guān)鍵字的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中常使用進(jìn)度條的代碼

    C#中常使用進(jìn)度條的代碼

    C#中常使用進(jìn)度條的代碼...
    2007-03-03
  • C#控制臺(tái)基礎(chǔ) list<>初始化的兩種方法

    C#控制臺(tái)基礎(chǔ) list<>初始化的兩種方法

    這篇文章主要介紹了C#控制臺(tái)基礎(chǔ) list<>初始化的兩種方法,需要的朋友可以參考下
    2016-12-12
  • C#壓縮和解壓文件的兩種方法

    C#壓縮和解壓文件的兩種方法

    在C#中,我們可以使用內(nèi)置的System.IO命名空間下的幾個(gè)類來處理文件的壓縮和解壓縮,主要涉及到兩個(gè)常用的庫:System.IO.Compression和WinRAR,以下是使用這些類進(jìn)行文件壓縮和解壓縮的基本步驟,需要的朋友可以參考下
    2024-08-08
  • c# 單例模式的實(shí)現(xiàn)方法

    c# 單例模式的實(shí)現(xiàn)方法

    這篇文章主要介紹了c# 單例模式的實(shí)現(xiàn)方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • C#華氏溫度和攝氏溫度相互轉(zhuǎn)換的方法

    C#華氏溫度和攝氏溫度相互轉(zhuǎn)換的方法

    這篇文章主要介紹了C#華氏溫度和攝氏溫度相互轉(zhuǎn)換的方法,涉及C#數(shù)學(xué)運(yùn)算的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • 深入了解C#多線程安全

    深入了解C#多線程安全

    使用多線程無法避免的一個(gè)問題就是多線程安全。那什么是多線程安全?如何解決多線程安全?本文將通過一些簡單的例子為大家詳細(xì)介紹一下多線程相關(guān)的問題,感興趣的可以了解一下
    2021-12-12

最新評(píng)論

乐都县| 娱乐| 怀柔区| 乌兰浩特市| 博客| 灵宝市| 随州市| 琼中| 海门市| 宜丰县| 克什克腾旗| 郧西县| 甘洛县| 广州市| 柳州市| 易门县| 内黄县| 海原县| 左云县| 武汉市| 景谷| 增城市| 思茅市| 牡丹江市| 湘乡市| 繁昌县| 原阳县| 武城县| 通化县| 吉木萨尔县| 荥经县| 正镶白旗| 栖霞市| 清河县| 新疆| 昔阳县| 扬州市| 桂阳县| 赣榆县| 临桂县| 栾川县|