欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C#基礎(chǔ)知識(shí)整理:基礎(chǔ)知識(shí)(11)值類型,引用類型

C#是面向?qū)ο蟮恼Z(yǔ)言,在面向?qū)ο蟮乃枷胫校挥袑?duì)象,所有事物都可以用類描述。所以比如這些,int,bool,char,string,double,long等都是類,那么像,30,2.5,"test"都是對(duì)應(yīng)類的一個(gè)對(duì)象。

創(chuàng)新互聯(lián)專注于垣曲企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),成都做商城網(wǎng)站。垣曲網(wǎng)站建設(shè)公司,為垣曲等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

        static void Main(string[] args)          {              string istring = 30.ToString();                string dstring = 2.5.ToString();                string sstring = "test".ToString();                Console.WriteLine(string.Format("{0},{1},{2}", istring, dstring, sstring));                Console.ReadLine();          }

輸出:
C#基礎(chǔ)知識(shí)整理:基礎(chǔ)知識(shí)(11) 值類型,引用類型

 可以看出它們有ToString()這個(gè)方法,所以它們是對(duì)象。
 在平時(shí)寫代碼時(shí),定義數(shù)據(jù)類型除了上述的這種之外,肯定都用過(guò):

         static void Main(string[] args)          {              Int32 i = 0;                UInt32 j = 0;                String str = "test";                Console.ReadLine();          }

    這個(gè)其實(shí)是.NET的一個(gè)機(jī)制,.NET是一個(gè)平臺(tái),這個(gè)平臺(tái)上有C#,VB這些語(yǔ)言。因此,.NET定義了一系列類型,映射到不同的語(yǔ)言中,Int32在c#中就是int。這樣的數(shù)據(jù)類型稱作基元類型,在C#中類的對(duì)象必須使用new生成。而這一部分類直接就可以用常量表示。基元類型定義在.net Framework中,System命名空間下。看一下基元類型在C#語(yǔ)言中的類型映射。

.NET Framework基元類型

C#類型

取值范圍 備注

System.Boolean

bool

true/false /
System.Byte byte 0 ~255

無(wú)符號(hào)8位整數(shù)

System.Sbyte sbyte -128 ~ 127 有符號(hào)8位整數(shù)
System.Char char 0 ~ 65,535 無(wú)符號(hào)16位整數(shù)
System.Int16 short

-32,768 ~ 32,767

有符號(hào)16位整數(shù)
System.UInt16 ushort 0 ~ 65,535 無(wú)符號(hào)16位整數(shù)
System.Int32 int -2,147,483,648 ~ 2,147,483,647 有符號(hào)32位整數(shù)
System.Int64 long

-9,223,372,036,854,775,808 ~

9,223,372,036,854,775,807

有符號(hào)64位整數(shù)
System.UInt64 ulong

0 ~ 18,446,744,073,709,551,615

無(wú)符號(hào)64位整數(shù)
System.Single float

±1.5 × 10-45 ~ ±3.4 × 1038

(7位有效數(shù)字)

32位單精度浮點(diǎn)數(shù)
System.Double double

±5.0 × 10-324 到 ±1.7 × 10308

(15至16位有效數(shù)字)

64位雙精度浮點(diǎn)
System.Decimal decimal

±1.0 × 10-28 到 ±7.9 × 1028

(27至28位有效數(shù)字)

128位浮點(diǎn)數(shù)數(shù)
System.String string 任意字符串 /
System.UInt32 uint 0 ~ 4,294,967,295 無(wú)符號(hào)32位整數(shù)

表中的除了string是引用類型(后面單獨(dú)解釋),其它都是值類型。
下面簡(jiǎn)單介紹下引用類型和值類型。
學(xué)習(xí)C語(yǔ)言的時(shí)候有個(gè)堆和棧的概念。
堆區(qū)——程序員分配釋放,或者程序結(jié)束有OS回收,分配方式類似于鏈表。
棧區(qū)——由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,變量值等。
棧內(nèi)存結(jié)構(gòu)可以快速的分配內(nèi)存和回收內(nèi)存,但棧空間有限,過(guò)多使用會(huì)“溢出”,因此棧只分配常用的,占用空間小的數(shù)據(jù)類型;堆內(nèi)存結(jié)構(gòu)分配內(nèi)存較慢,但是利用空間大,可以存放大型數(shù)據(jù)。
在C#中,基本上所有的數(shù)據(jù)都存儲(chǔ)在“堆”結(jié)構(gòu)中,稱之為“托管堆”,受.NET垃圾回收監(jiān)控。但是相對(duì)于棧堆結(jié)構(gòu)中內(nèi)存分配效率比較低。為了正確進(jìn)行垃圾回收,每次分配的堆空間比實(shí)際所需空間稍大,小型數(shù)據(jù)使用堆是不太合適的。
可以比較看一下值類型和引用類型:
C#中提供了Struct定義值類型,直接在棧上分配內(nèi)存。

 /// <summary>      /// 使用struct定義一個(gè)值類型,      /// 值類型的只能實(shí)現(xiàn)接口,不能繼承類      /// </summary>      public struct StructPositiveNumber : ICloneable        {          /// <summary>          /// 值類型字段          /// </summary>          private int number;            /// <summary>          /// 靜態(tài)只讀字段,作為類的初始值          /// </summary>          public readonly static StructPositiveNumber InitialValue = new StructPositiveNumber();            /// <summary>          /// 屬性          /// </summary>          public int Number          {              get              {                  return number;              }                set              {                  if (value <= 0)                  {                      throw new Exception();                  }                    this.number = value;              }          }          /// <summary>          /// 可以定義構(gòu)造器,但是和類不同,這里的默認(rèn)構(gòu)造器依然存在          /// </summary>          public StructPositiveNumber(int value)          {              if (value <= 0)              {                  throw new Exception();              }                this.number = value;          }            /// <summary>          /// 實(shí)現(xiàn)克隆方法,返回當(dāng)前對(duì)象          /// </summary>          /// <returns></returns>          public object Clone()          {              return new StructPositiveNumber(this.number);          }      }

調(diào)用

       static void Main(string[] args)          {              //聲明變量,賦值              StructPositiveNumber pNumber1 = StructPositiveNumber.InitialValue;                pNumber1.Number = 1;                //pNumber1賦給pNumber2              StructPositiveNumber pNumber2 = pNumber1;                //改變pNumber2的值              pNumber2.Number = 2;                //看打印結(jié)果,改變了pNumber2的值,但是不影響pNumber1              Console.WriteLine(pNumber1.Number);//1                Console.WriteLine(pNumber2.Number);//2                //重新初始化pNumber2,通過(guò)構(gòu)造器生成改變了初始值。              pNumber2 = new StructPositiveNumber(3);                Console.WriteLine(pNumber2.Number);//3                //調(diào)用Clone將pNumber2復(fù)制給pNumber1              pNumber1 = (StructPositiveNumber)pNumber2.Clone();                Console.WriteLine(pNumber1.Number);//3                //改變pNumber1的值,但是pNumber2值不改變              pNumber1.Number = 4;                Console.WriteLine(pNumber1.Number);//4                Console.WriteLine(pNumber2.Number);//3                Console.ReadLine();          }

結(jié)果
C#基礎(chǔ)知識(shí)整理:基礎(chǔ)知識(shí)(11) 值類型,引用類型

再看引用類型定義的:

 public class ClassPositiveNumber : ICloneable      {          private int number;            public int Number          {              get              {                  return this.number;              }                set              {                  if (value <= 0)                  {                      throw new Exception();                  }                    this.number = value;              }          }            //引用類型自己可以初始化為null,無(wú)需定義初始值          //public readonly static ClassPositiveNumber InitialValue = new ClassPositiveNumber();            public ClassPositiveNumber(int value)          {              if (value <= 0)              {                  throw new Exception();              }                this.number = value;          }            public object Clone()          {              return new ClassPositiveNumber(this.number);          }      }

調(diào)用

      static void Main(string[] args)          {              ClassPositiveNumber cNumber1;//默認(rèn)值為null                cNumber1 = new ClassPositiveNumber(1);                ClassPositiveNumber cNumber2 = cNumber1;                cNumber2.Number = 2;                //可以看出,兩個(gè)引用引用到了相同的對(duì)象              Console.WriteLine(cNumber1.Number);//2                Console.WriteLine(cNumber2.Number);//2                //重新初始化cNumber2,之前的對(duì)象已被丟棄              cNumber2 = new ClassPositiveNumber(3);                Console.WriteLine(cNumber2.Number);//3                            //復(fù)制是復(fù)制一個(gè)對(duì)象的副本,因此,是兩個(gè)不同的對(duì)象              cNumber1 = (ClassPositiveNumber)cNumber2.Clone();                Console.WriteLine(cNumber1.Number);//3                cNumber1.Number = 4;                Console.WriteLine(cNumber1.Number);//4                Console.WriteLine(cNumber2.Number);//3                Console.ReadLine();          }

結(jié)果
C#基礎(chǔ)知識(shí)整理:基礎(chǔ)知識(shí)(11) 值類型,引用類型

通過(guò)例子,可以看出值類型的特點(diǎn)如下:
a、使用struct聲明;
b、不能繼承類,但是可以實(shí)現(xiàn)接口(當(dāng)然除object類外);
c、值類型使用值類型做為字段,但是字段無(wú)法有默認(rèn)值;
c、值類型中必須有默認(rèn)構(gòu)造器,而且自己定義構(gòu)造器后,默認(rèn)的無(wú)參數(shù)的構(gòu)造器依然存在。而且在構(gòu)造其中只能訪問(wèn)類中的字段,但是不能訪問(wèn)屬性。符號(hào)=對(duì)于值類型來(lái)說(shuō)是賦值,所以賦值是值類型變量不能為空,因?yàn)?#20540;類型沒(méi)有引用的概念,肯定有值。

代碼下載:http://download.csdn.net/detail/yysyangyangyangshan/4452051

網(wǎng)站題目:C#基礎(chǔ)知識(shí)整理:基礎(chǔ)知識(shí)(11)值類型,引用類型
地址分享:http://www.chinadenli.net/article28/jcojcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版Google面包屑導(dǎo)航網(wǎng)站排名網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)