原文:C# 類型_w3cschool
C#類型
類型定義值的藍圖。有不同的操作與不同類型相關聯。
在下面的示例中,我們使用兩個類型為int
的常量,值為2?
和?3
。
static void Main() {int x = 2 * 3;Console.WriteLine (x);
}
int?
是一個表示整數值的構建類型。
C#也定義類型,如long,string,byte ...
變量
我們在上面的代碼中聲明了一個類型為?int?
的變量,其名稱為?x?
。
變量表示可以包含不同值的內存位置。我們可以為變量賦予不同的值。
相反,常數總是表示相同的值:
const int y = 6;
相反,常數總是表示相同的值:
C#中的所有值都是類型的實例。
預定義類型示例
預定義類型是編譯器支持的類型。
上面示例中的int
類型是用于表示整數集合的預定義類型,從-231到231-1。
我們可以執行函數,如與int類型的實例的算術如下:
int x = 2 * 3;
C#有其他類型。C#type?string?
表示一個序列字符,如“.NET"。
我們可以通過調用函數來處理字符串,如下所示:
string message = "Hello world";
string upperMessage = message.ToUpper();
Console.WriteLine (upperMessage);
上面的代碼生成以下結果。
?
int x = 2;
message = message + x.ToString();
Console.WriteLine (message);
上面的代碼生成以下結果。
?
值類型與引用類型
所有C#類型分為以下類別:
- 值類型
- 引用類型
- 通用類型參數
- 指針類型
值類型包括大多數內置類型,例如,int,long,bool以及自定義結構和枚舉類型。
引用類型包括所有類,數組,委托和接口類型。它還包括預定義的?string?
類型。
值類型
值類型變量或常量的內容是一個值。
我們可以使用?struct?
關鍵字定義一個自定義值類型:
public struct Point { public int X, Y;
}
值類型實例的分配始終會復制實例。
例如:
static void Main() { Point p1 = new Point(); p1.X = 1;Point p2 = p1; // Assignment causes copyConsole.WriteLine (p1.X); // 1 Console.WriteLine (p2.X); // 1p1.X = 2; // Change p1.XConsole.WriteLine (p1.X); // 2 Console.WriteLine (p2.X); // 1
}
引用類型
引用類型有兩部分:一個對象和對該對象的引用。
引用類型變量的內容是對包含該值的對象的引用。
這里是作為類重寫的Point類型:
public class Point { public int X, Y;
}
分配引用類型變量會復制引用,而不是對象實例。
這允許多個變量引用同一個對象。
static void Main() { Point p1 = new Point(); p1.X = 1;Point p2 = p1; // Copies p1 referenceConsole.WriteLine (p1.X); // 1 Console.WriteLine (p2.X); // 1p1.X = 2; // Change p1.XConsole.WriteLine (p1.X); // 2 Console.WriteLine (p2.X); // 2
}
空值
一個引用可以分配常量null,表示引用指向沒有對象:
class Point {...} Point p = null;
Console.WriteLine (p == null); // True
值類型通常不能為null值:
預定義類型分類法
C#中的預定義類型有:
- 值類型
- 數字
- 有符號整數 (sbyte, short, int, long)
- 無符號整數 (byte, ushort, uint, ulong)
- 實數 (float, double, decimal)
- 邏輯 (bool)
- 字符 (char)
- 引用類型
- String (string)
- Object (object)
C#別名中的預定義類型System
命名空間中的框架類型。
這兩個語句之間只有語法上的區別:
int i = 5;
System.Int32 i = 5;