自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

.NET數(shù)據(jù)類型匯總

開發(fā) 后端
任何一門開發(fā)語(yǔ)言都需要數(shù)據(jù)類型作為其基礎(chǔ)根本,就如同自然語(yǔ)言中的文字一般,所以想要掌握一門開發(fā)語(yǔ)言就要先了解其中的數(shù)據(jù)類型,接下來(lái)我就談?wù)勎覍?duì).NET的數(shù)據(jù)類型的了解(開發(fā)語(yǔ)言以C#為主)。

.NET數(shù)據(jù)類型之字符串(String)

  • 字符串

表示文本,即一系列 Unicode 字符。字符串是 Unicode 字符的有序集合,用于表示文本。 String 對(duì)象是 System.Char 對(duì)象的有序集合,用于表示字符串。 String 對(duì)象的值是該有序集合的內(nèi)容,并且該值是不可變的(即,為只讀)。String 對(duì)象的***大小內(nèi)存中的為 2 GB 或大約 10 億個(gè)字符。

  • 關(guān)鍵字

string

  • 值范圍

一組字符

  • 解析數(shù)值
  1. int number = Convert .ToInt32(strNumber); 
  • 格式化
    • 保留2位小數(shù)
      1. bc.FRetailPrice = String.Format("{0:N2}", Convert.ToDecimal(Math.Round(double.Parse(dgvBarcode.Rows[i].Cells["FRetailPrice"].Value.ToString()),2))).ToString(); 
  • 常用方法
    • Trim:去除字符串頭尾兩端的指定字符
    • Concat:字符串拼接
  • 轉(zhuǎn)義字符
    • \' 單引號(hào)
    • \" 雙引號(hào)
    • \\ 反斜杠
    • \0 空
    • \a 警告
    • \b 退格
    • \f 換頁(yè)
    • \n 換行
    • \r 回車
    • \t 水平制表符
    • \v 垂直制表符
  • 逐字字符串

字符串加@前綴

  • 比較
    • 比較空值
      • string.IsNullOrEmpty(str1)
      • s == string.Empty
      • s.Length == 0
      • s == ""
    • 比較相等性

使用==和!=操作符進(jìn)行比較時(shí),引用類型比較的是內(nèi)存中的對(duì)象,但string的相等性操作符被重新定義了,比較的是字符串的值。

  • 不可變性

string一旦初始化后不能改變,進(jìn)行修改后得到的是新的string對(duì)象,因此string的濫用是極其的低效。

  • StringBuilder

使用StringBuilder對(duì)字符串進(jìn)行修改,修改的是本對(duì)象而非產(chǎn)生新對(duì)象。

#p#

.NET 數(shù)據(jù)類型之類(Class)

類是 C# 中功能最為強(qiáng)大的數(shù)據(jù)類型。像結(jié)構(gòu)一樣,類也定義了數(shù)據(jù)類型的數(shù)據(jù)和行為。然后,程序員可以創(chuàng)建作為此類的實(shí)例的對(duì)象。與結(jié)構(gòu)不同,類支持繼承,而繼承是面向?qū)ο缶幊痰幕A(chǔ)部分。

  • 構(gòu)造函數(shù)

構(gòu)造函數(shù)是在創(chuàng)建給定類型的對(duì)象時(shí)執(zhí)行的類方法,是在運(yùn)行時(shí)調(diào)用的而非編譯時(shí),包括實(shí)例構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù)。構(gòu)造函數(shù)與類名相同,且不能有返回值。

  • 構(gòu)造函數(shù)鏈

使用this關(guān)鍵字進(jìn)行串聯(lián)構(gòu)造函數(shù)調(diào)用,可以使用可選參數(shù)替代構(gòu)造函數(shù)鏈,但是可選參數(shù)的語(yǔ)法只能在.NET4環(huán)境下運(yùn)行。

  • 靜態(tài)構(gòu)造函數(shù)
  • 析構(gòu)函數(shù)(終結(jié)器)

析構(gòu)函數(shù)用于析構(gòu)類的實(shí)例,重新對(duì)象的Finalize()方法。 不能在結(jié)構(gòu)中定義析構(gòu)函數(shù)。 只能對(duì)類使用析構(gòu)函數(shù)。一個(gè)類只能有一個(gè)析構(gòu)函數(shù)。無(wú)法繼承或重載析構(gòu)函數(shù)。無(wú)法調(diào)用析構(gòu)函數(shù)。 它們是被自動(dòng)調(diào)用的。析構(gòu)函數(shù)既沒(méi)有修飾符,也沒(méi)有參數(shù),是隱式保護(hù)的。

  • 關(guān)鍵字
    • new:創(chuàng)建新對(duì)象
    • this:實(shí)例對(duì)象
    • base:基類對(duì)象
    • static:靜態(tài)
  • 默認(rèn)訪問(wèn)修飾符
  • 類:隱式內(nèi)部
  • 默認(rèn)構(gòu)造函數(shù):隱式私有
  • 對(duì)象

類的實(shí)例化,使用new關(guān)鍵字進(jìn)行實(shí)例化

  • 對(duì)象初始化器

對(duì)象初始化器只用少量的代碼就可以創(chuàng)建對(duì)象并設(shè)置一些屬性和公共字段,對(duì)象初始化時(shí)使用{},內(nèi)部使用逗號(hào)分隔的指定值的列表,初始化列表中的每個(gè)成員都映射為正在初始化的對(duì)象中的公共字段或公共屬性。

  • 代碼示例
  1. Point p = new Point{X=1,Y=2}; 
  • Object

object 類型在 .NET Framework 中是 Object 的別名。 在 C# 的統(tǒng)一類型系統(tǒng)中,所有類型(預(yù)定義類型、用戶定義類型、引用類型和值類型)都是直接或間接從 Object 繼承的。 可以將任何類型的值賦給 object 類型的變量。 

  • 裝箱

將值類型的變量轉(zhuǎn)換為對(duì)象的過(guò)程稱為“裝箱”。 

  • 拆箱

 將對(duì)象類型的變量轉(zhuǎn)換為值類型的過(guò)程稱為“拆箱”。

#p#

.NET 數(shù)據(jù)類型之指針類型(type*)

  • 指針類型

在不安全的上下文中,類型可以是指針類型以及值類型或引用類型。指針類型不繼承 object,并且指針類型與 object 之間不存在轉(zhuǎn)換。此外,裝箱和取消裝箱不支持指針。但是,允許在不同指針類型之間以及指針類型與整型之間進(jìn)行轉(zhuǎn)換。當(dāng)在同一個(gè)聲明中聲明多個(gè)指針時(shí),* 僅與基礎(chǔ)類型一起使用,而不是作為每個(gè)指針名稱的前綴。 指針不能指向引用或包含引用的結(jié)構(gòu),因?yàn)榧词褂兄羔樦赶驅(qū)ο笠茫搶?duì)象引用也可能會(huì)被執(zhí)行垃圾回收。GC 并不注意是否有任何類型的指針指向?qū)ο蟆?/span>

  • 語(yǔ)法
    1. type* identifier;void* identifier;  
    2. int* p1, p2, p3;  
    3. int number;int* p = &number; 
    4. char* charPointer = stackalloc char[123];for (int i = 65; i < 123; i++){charPointer[i] = (char)i;} 
  • 指針類型聲明
示例 說(shuō)明

int* p

p 是指向整數(shù)的指針

int** p

p 是指向整數(shù)的指針的指針

int*[] p

p 是指向整數(shù)的指針的一維數(shù)組

char* p

p 是指向字符的指針

void* p

p 是指向未知類型的指針

  • 指針相關(guān)的運(yùn)算符和語(yǔ)句
運(yùn)算符/語(yǔ)句 用途

*

執(zhí)行指針間接尋址。

->

通過(guò)指針訪問(wèn)結(jié)構(gòu)的成員。

[]

對(duì)指針建立索引。

&

獲取變量的地址。

++ 和 --

遞增或遞減指針。

加、減

執(zhí)行指針?biāo)惴ā?/span>

==、!=、<、>、<= 和 >=

比較指針。

stackalloc

在堆棧上分配內(nèi)存。

fixed 語(yǔ)句

臨時(shí)固定變量以便可以找到其地址。

 

  • 指針轉(zhuǎn)換
    • 隱式指針轉(zhuǎn)換

任何指針類型

void*

null

任何指針類型

    • 顯示指針轉(zhuǎn)換

任何指針類型

所有其他指針類型

sbyte、byte、short、ushort、int、uint、long 或 ulong

任何指針類型

任何指針類型

sbyte、byte、short、ushort、int、uint、long 或 ulong

 

  • 代碼示例
    • 指針訪問(wèn)成員
      1. truct CoOrds{ 
      2.     public int x; 
      3.     public int y; 
      4. class AccessMembers 
      5.     static void Main()  
      6.     { 
      7.         CoOrds home; 
      8.         unsafe  
      9.         { 
      10.             CoOrds* p = &home; 
      11.             p->x = 25
      12.             p->y = 12
      13.             System.Console.WriteLine("The coordinates are: x={0}, y={1}", p->x, p->y ); 
      14.         } 
      15.     } 
    • 指針訪問(wèn)數(shù)組元素
      1. class Pointers 
      2.     unsafe static void Main()  
      3.     { 
      4.         char* charPointer = stackalloc char[123]; 
      5.  
      6.         for (int i = 65; i < 123; i++) 
      7.         { 
      8.             charPointer[i] = (char)i; 
      9.         } 
      10.         System.Console.WriteLine("Uppercase letters:"); 
      11.         for (int i = 65; i < 91; i++) 
      12.         { 
      13.             System.Console.Write(charPointer[i]); 
      14.         } 
      15.         System.Console.WriteLine(); 
      16.         System.Console.WriteLine("Lowercase letters:"); 
      17.         for (int i = 97; i < 123; i++) 
      18.         { 
      19.             System.Console.Write(charPointer[i]); 
      20.         } 
      21.     } 
    • 指針復(fù)制字節(jié)數(shù)組
      1. class TestCopy 
      2.     static unsafe void Copy(byte[] src, int srcIndex, byte[] dst, int dstIndex, int count) 
      3.     { 
      4.         if (src == null || srcIndex < 0 || 
      5.             dst == null || dstIndex < 0 || count < 0
      6.         { 
      7.             throw new System.ArgumentException(); 
      8.         } 
      9.  
      10.         int srcsrcLen = src.Length; 
      11.         int dstdstLen = dst.Length; 
      12.         if (srcLen - srcIndex < count || dstLen - dstIndex < count
      13.         { 
      14.             throw new System.ArgumentException(); 
      15.         } 
      16.         fixed (byte* pSrc = srcpDst = dst
      17.         { 
      18.             byte* ps = pSrc
      19.             byte* pd = pDst
      20.             for (int i = 0 ; i < count / 4 ; i++) 
      21.             { 
      22.                 *((int*)pd) = *((int*)ps); 
      23.                 pd += 4; 
      24.                 ps += 4; 
      25.             } 
      26.             for (int i = 0; i < count % 4 ; i++) 
      27.             { 
      28.                 *pd = *ps; 
      29.                 pd++; 
      30.                 ps++; 
      31.             } 
      32.         } 
      33.     } 
      34.     static void Main() 
      35.     { 
      36.         byte[] a = new byte[100]; 
      37.         byte[] b = new byte[100]; 
      38.  
      39.         for (int i = 0; i < 100; ++i) 
      40.         { 
      41.             a[i] = (byte)i; 
      42.         } 
      43.         Copy(a, 0, b, 0, 100); 
      44.         System.Console.WriteLine("The first 10 elements are:"); 
      45.         for (int i = 0; i < 10; ++i)  
      46.         { 
      47.             System.Console.Write(b[i] + " "); 
      48.         } 
      49.         System.Console.WriteLine("\n"); 
      50.     } 

#p#

.NET 數(shù)據(jù)類型之動(dòng)態(tài)類型(Dynamic)

  • Dynamic
     在通過(guò) dynamic 類型實(shí)現(xiàn)的操作中,該類型的作用是繞過(guò)編譯時(shí)類型檢查, 改為在運(yùn)行時(shí)解析這些操作。 dynamic 類型簡(jiǎn)化了對(duì) COM API(例如 Office Automation API)、動(dòng)態(tài) API(例如 IronPython 庫(kù))和 HTML 文檔對(duì)象模型 (DOM) 的訪問(wèn)。
     在大多數(shù)情況下,dynamic 類型與 object 類型的行為是一樣的。 但是,不會(huì)用編譯器對(duì)包含 dynamic 類型表達(dá)式的操作進(jìn)行解析或類型檢查。 編譯器將有關(guān)該操作信息打包在一起,并且該信息以后用于計(jì)算運(yùn)行時(shí)操作。 在此過(guò)程中,類型 dynamic 的變量會(huì)編譯到類型 object 的變量中。 因此,類型 dynamic 只在編譯時(shí)存在,在運(yùn)行時(shí)則不存在。
  • 代碼示例
    • 在聲明中,作為屬性、字段、索引器、參數(shù)、返回值或類型約束的類型。 下面的類定義在幾個(gè)不同的聲明中使用 dynamic。
      1. class ExampleClass 
      2.     static dynamic field; 
      3.     dynamic prop { get; set; } 
      4.     public dynamic exampleMethod(dynamic d) 
      5.     { 
      6.         dynamic local = "Local variable"
      7.         int two = 2
      8.         if (d is int) 
      9.         { 
      10.             return local; 
      11.         } 
      12.         else 
      13.         { 
      14.             return two; 
      15.         } 
      16.     } 

在顯式類型轉(zhuǎn)換中,作為轉(zhuǎn)換的目標(biāo)類型。

  1. static void convertToDynamic()  
  2. {  
  3.     dynamic d;  
  4.     int i = 20;  
  5.     d = (dynamic)i;  
  6.     Console.WriteLine(d);  
  7.     string s = "Example string.";  
  8.     d = (dynamic)s;  
  9.     Console.WriteLine(d);  
  10.     DateTime dt = DateTime.Today;  
  11.     d = (dynamic)dt;  
  12.     Console.WriteLine(d);  
  13. }  

在以類型充當(dāng)值(如 is 運(yùn)算符或 as 運(yùn)算符右側(cè))或者作為 typeof 的參數(shù)成為構(gòu)造類型的一部分的任何上下文中。 例如,可以在下列表達(dá)式中使用 dynamic。

  1. int i = 8; dynamic d; d = i as dynamic; Console.WriteLine(typeof(List<dynamic>)); 

#p#

 .NET 數(shù)據(jù)類型之匿名類型(var)

  • 匿名類型

匿名類型提供了一種方便的方法,可用來(lái)將一組只讀屬性封裝到單個(gè)對(duì)象中,而無(wú)需首先顯式定義一個(gè)類型。 類型名由編譯器生成,并且不能在源代碼級(jí)使用。 每個(gè)屬性的類型由編譯器推斷。

可通過(guò)使用 new 運(yùn)算符和對(duì)象初始值創(chuàng)建匿名類型。

  • 限制條件
    • 沒(méi)有控制匿名類型的名字
    • 匿名類型繼承自O(shè)bject
    • 匿名類型的字段和屬性總是只讀的
    • 匿名類型不支持事件、自定義方法、自定義操作符和自定義重寫
    • 匿名類型是隱式封閉的
    • 匿名類型的實(shí)例創(chuàng)建只使用默認(rèn)構(gòu)造函數(shù)
  • 語(yǔ)法
  1. var v = new { Amount = 108Message = "Hello" }; 
  2. var anonArray = new[] { new { name = "apple"diam = 4 }, new { name = "grape"diam = 1 }}; 
  3. var productQuery =  
  4.     from prod in products 
  5.     select new { prod.Color, prod.Price }; 
  6.  
  7. foreach (var v in productQuery) 
  8.     Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price); 
  9. }

 

責(zé)任編輯:陳四芳 來(lái)源: M守護(hù)神的博客
相關(guān)推薦

2013-07-30 14:00:46

.NET數(shù)據(jù)類型

2010-06-10 10:06:01

MySQL數(shù)據(jù)類型

2010-01-14 14:21:07

2009-08-04 14:56:34

ASP.NET數(shù)據(jù)類型

2009-10-13 16:05:07

VB.NET字符數(shù)據(jù)類

2009-10-16 12:52:28

VB.NET簡(jiǎn)單數(shù)據(jù)類

2009-11-02 16:15:51

VB.NET字符數(shù)據(jù)類

2009-11-12 13:19:55

2010-01-20 18:14:58

VB.NET數(shù)據(jù)類型

2010-01-07 14:10:41

VB.NET數(shù)據(jù)類型

2019-08-12 11:40:48

數(shù)據(jù)庫(kù)SQLite3數(shù)據(jù)類型

2016-08-18 14:13:55

JavaScript基本數(shù)據(jù)引用數(shù)據(jù)

2014-01-05 17:08:09

PostgreSQL數(shù)據(jù)類型

2010-07-22 17:57:40

2009-11-10 11:04:09

VB.NET數(shù)據(jù)類型

2010-08-10 17:17:59

2010-10-15 13:28:34

MySql數(shù)據(jù)類型

2017-07-10 13:38:07

MySQL數(shù)據(jù)類型整數(shù)類型

2010-01-15 15:10:43

VB.NET Stri

2010-01-18 16:49:36

VB.NET基本數(shù)據(jù)類
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)