偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

  • 字符串

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

  • 關(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)義字符
    • \' 單引號
    • \" 雙引號
    • \\ 反斜杠
    • \0 空
    • \a 警告
    • \b 退格
    • \f 換頁
    • \n 換行
    • \r 回車
    • \t 水平制表符
    • \v 垂直制表符
  • 逐字字符串

字符串加@前綴

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

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

  • 不可變性

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

  • StringBuilder

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

#p#

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

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

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

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

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

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

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

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

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

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

  • 對象初始化器

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

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

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

  • 裝箱

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

  • 拆箱

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

#p#

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

  • 指針類型

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

  • 語法
    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;} 
  • 指針類型聲明
示例 說明

int* p

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

int** p

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

int*[] p

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

char* p

p 是指向字符的指針

void* p

p 是指向未知類型的指針

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

*

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

->

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

[]

對指針建立索引。

&

獲取變量的地址。

++ 和 --

遞增或遞減指針。

加、減

執(zhí)行指針算法。

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

比較指針。

stackalloc

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

fixed 語句

臨時固定變量以便可以找到其地址。

 

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

任何指針類型

void*

null

任何指針類型

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

任何指針類型

所有其他指針類型

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

任何指針類型

任何指針類型

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

 

  • 代碼示例
    • 指針訪問成員
      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.     } 
    • 指針訪問數(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ù)類型之動態(tài)類型(Dynamic)

  • Dynamic
     在通過 dynamic 類型實現(xiàn)的操作中,該類型的作用是繞過編譯時類型檢查, 改為在運行時解析這些操作。 dynamic 類型簡化了對 COM API(例如 Office Automation API)、動態(tài) API(例如 IronPython 庫)和 HTML 文檔對象模型 (DOM) 的訪問。
     在大多數(shù)情況下,dynamic 類型與 object 類型的行為是一樣的。 但是,不會用編譯器對包含 dynamic 類型表達式的操作進行解析或類型檢查。 編譯器將有關(guān)該操作信息打包在一起,并且該信息以后用于計算運行時操作。 在此過程中,類型 dynamic 的變量會編譯到類型 object 的變量中。 因此,類型 dynamic 只在編譯時存在,在運行時則不存在。
  • 代碼示例
    • 在聲明中,作為屬性、字段、索引器、參數(shù)、返回值或類型約束的類型。 下面的類定義在幾個不同的聲明中使用 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)換的目標類型。

  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. }  

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

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

#p#

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

  • 匿名類型

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

可通過使用 new 運算符和對象初始值創(chuàng)建匿名類型。

  • 限制條件
    • 沒有控制匿名類型的名字
    • 匿名類型繼承自O(shè)bject
    • 匿名類型的字段和屬性總是只讀的
    • 匿名類型不支持事件、自定義方法、自定義操作符和自定義重寫
    • 匿名類型是隱式封閉的
    • 匿名類型的實例創(chuàng)建只使用默認構(gòu)造函數(shù)
  • 語法
  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é)任編輯:陳四芳 來源: M守護神的博客
相關(guān)推薦

2013-07-30 14:00:46

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

2010-06-10 10:06:01

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

2009-08-04 14:56:34

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

2009-10-13 16:05:07

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

2010-01-14 14:21:07

2009-11-12 13:19:55

2010-01-20 18:14:58

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

2009-11-02 16:15:51

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

2009-10-16 12:52:28

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

2010-01-07 14:10:41

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

2014-01-05 17:08:09

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

2016-08-18 14:13:55

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

2019-08-12 11:40:48

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

2010-07-22 17:57:40

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ù)類

2010-08-10 17:17:59

2010-10-15 13:28:34

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

2009-11-10 11:04:09

VB.NET數(shù)據(jù)類型
點贊
收藏

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