成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET數據類型匯總

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

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

  • 字符串

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

  • 關鍵字

string

  • 值范圍

一組字符

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

字符串加@前綴

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

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

  • 不可變性

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

  • StringBuilder

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

#p#

.NET 數據類型之類(Class)

類是 C# 中功能最為強大的數據類型。像結構一樣,類也定義了數據類型的數據和行為。然后,程序員可以創建作為此類的實例的對象。與結構不同,類支持繼承,而繼承是面向對象編程的基礎部分。

  • 構造函數

構造函數是在創建給定類型的對象時執行的類方法,是在運行時調用的而非編譯時,包括實例構造函數和靜態構造函數。構造函數與類名相同,且不能有返回值。

  • 構造函數鏈

使用this關鍵字進行串聯構造函數調用,可以使用可選參數替代構造函數鏈,但是可選參數的語法只能在.NET4環境下運行。

  • 靜態構造函數
  • 析構函數(終結器)

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

  • 關鍵字
    • new:創建新對象
    • this:實例對象
    • base:基類對象
    • static:靜態
  • 默認訪問修飾符
  • 類:隱式內部
  • 默認構造函數:隱式私有
  • 對象

類的實例化,使用new關鍵字進行實例化

  • 對象初始化器

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

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

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

  • 裝箱

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

  • 拆箱

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

#p#

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

  • 指針類型

在不安全的上下文中,類型可以是指針類型以及值類型或引用類型。指針類型不繼承 object,并且指針類型與 object 之間不存在轉換。此外,裝箱和取消裝箱不支持指針。但是,允許在不同指針類型之間以及指針類型與整型之間進行轉換。當在同一個聲明中聲明多個指針時,* 僅與基礎類型一起使用,而不是作為每個指針名稱的前綴。 指針不能指向引用或包含引用的結構,因為即使有指針指向對象引用,該對象引用也可能會被執行垃圾回收。GC 并不注意是否有任何類型的指針指向對象。

  • 語法
    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 是指向整數的指針

int** p

p 是指向整數的指針的指針

int*[] p

p 是指向整數的指針的一維數組

char* p

p 是指向字符的指針

void* p

p 是指向未知類型的指針

  • 指針相關的運算符和語句
運算符/語句 用途

*

執行指針間接尋址。

->

通過指針訪問結構的成員。

[]

對指針建立索引。

&

獲取變量的地址。

++ 和 --

遞增或遞減指針。

加、減

執行指針算法。

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

比較指針。

stackalloc

在堆棧上分配內存。

fixed 語句

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

 

  • 指針轉換
    • 隱式指針轉換

任何指針類型

void*

null

任何指針類型

    • 顯示指針轉換

任何指針類型

所有其他指針類型

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.     } 
    • 指針訪問數組元素
      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.     } 
    • 指針復制字節數組
      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 數據類型之動態類型(Dynamic)

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

在顯式類型轉換中,作為轉換的目標類型。

  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 運算符右側)或者作為 typeof 的參數成為構造類型的一部分的任何上下文中。 例如,可以在下列表達式中使用 dynamic。

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

#p#

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

  • 匿名類型

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

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

  • 限制條件
    • 沒有控制匿名類型的名字
    • 匿名類型繼承自Object
    • 匿名類型的字段和屬性總是只讀的
    • 匿名類型不支持事件、自定義方法、自定義操作符和自定義重寫
    • 匿名類型是隱式封閉的
    • 匿名類型的實例創建只使用默認構造函數
  • 語法
  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. }

 

責任編輯:陳四芳 來源: M守護神的博客
相關推薦

2013-07-30 14:00:46

.NET數據類型

2010-06-10 10:06:01

MySQL數據類型

2010-01-14 14:21:07

2009-08-04 14:56:34

ASP.NET數據類型

2009-10-13 16:05:07

VB.NET字符數據類

2009-10-16 12:52:28

VB.NET簡單數據類

2009-11-12 13:19:55

2010-01-20 18:14:58

VB.NET數據類型

2009-11-02 16:15:51

VB.NET字符數據類

2010-01-07 14:10:41

VB.NET數據類型

2019-08-12 11:40:48

數據庫SQLite3數據類型

2014-01-05 17:08:09

PostgreSQL數據類型

2016-08-18 14:13:55

JavaScript基本數據引用數據

2010-07-22 17:57:40

2010-08-10 17:17:59

2010-10-15 13:28:34

MySql數據類型

2017-07-10 13:38:07

MySQL數據類型整數類型

2009-11-10 11:04:09

VB.NET數據類型

2010-01-15 15:10:43

VB.NET Stri

2010-01-18 16:49:36

VB.NET基本數據類
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩免费视频一区二区 | 伊人性伊人情综合网 | 久久久综合久久 | 天天躁天天操 | 久久久久久电影 | 国产精品高潮呻吟久久久久 | 亚洲视频在线看 | 欧美日本高清 | 一区二区中文 | 国产成在线观看免费视频 | 亚洲国产69 | 成人在线视频网 | 免费观看成人鲁鲁鲁鲁鲁视频 | 成人午夜影院 | 国产成人精品一区二区三区网站观看 | 日本中出视频 | 羞羞视频免费在线 | 亚洲国产欧美日韩 | 中文字幕男人的天堂 | 中文一级片 | 国产精品久久久久久久久久久久冷 | 国产成人精品一区二区三 | 中文字幕视频一区二区 | 99re视频精品| 伊人伊人伊人 | 久久av一区二区三区 | 国内精品视频在线观看 | 欧美精品在线观看 | 国产一区高清 | 成人在线视频免费看 | 国产精品久久福利 | 美国黄色一级片 | 亚洲综合在线视频 | 亚洲高清电影 | 日韩精品一区二区三区四区视频 | 亚洲在线一区 | 一级片av | 亚洲伊人久久综合 | 中文字幕一区二区三区四区不卡 | 国产高清精品一区二区三区 | 久草视频在|