在 C# 中,常量和變量是存儲數據的基本方式:
// 常量:使用 const 關鍵字聲明,必須在聲明時初始化,且值不能改變
const double Pi = 3.14159;
const string Message = "Hello, World!";
?
// 變量:存儲可以變化的值,需要先聲明類型,再賦值
int age; ? ? ? ? // 聲明整型變量
age = 30; ? ? ? ?// 賦值
string name = "John"; ?// 聲明并初始化
C# 數據類型
C# 中的數據類型分為兩大類:
值類型
值類型直接存儲數據的值,分配在棧上,包括:
// 整數類型
byte b = 255; ? ? ?// 無符號8位整數 (0-255)
short s = 32767; ? ?// 16位整數
int num = 123456; ? // 32位整數
long bigNum = 1234567890123; ?// 64位整數
?
// 浮點類型
float f = 3.14f; ? // 單精度浮點數,需加后綴 f
double d = 3.14159; ?// 雙精度浮點數
?
// 布爾類型
bool isActive = true;
?
// 字符類型
char c = 'A'; ? ? ?// 存儲單個Unicode字符
引用類型
引用類型存儲對數據的引用(內存地址),分配在堆上,包括:
// 字符串類型
string text = "Hello"; ?// 不可變的字符序列
?
// 對象類型
object obj = 123; ? ? ? // 可以引用任何類型的對象
?
// 數組類型
int[] numbers = {1, 2, 3, 4, 5}; ?// 存儲相同類型的多個元素
值類型和引用類型的區別
區別 | 值類型 | 引用類型 |
---|---|---|
存儲方式 | 直接存儲值 | 存儲對值的引用 |
內存位置 | 棧(Stack) | 堆(Heap) |
復制行為 | 復制值本身 | 復制引用(指向同一對象) |
默認值 | 例如:int 默認值為 0 | 默認為 null |
示例類型 | int , bool , struct | string , object , array |
枚舉類型
枚舉(enum
)是一種值類型,用于定義一組命名的常量:
// 定義枚舉類型
enum DaysOfWeek
{Monday, ? ? ?// 默認值為0Tuesday, ? ? // 1Wednesday, ? // 2Thursday, ? ?// 3Friday, ? ? ?// 4Saturday, ? ?// 5Sunday ? ? ? // 6
}
?
// 使用枚舉
DaysOfWeek today = DaysOfWeek.Monday;
Console.WriteLine(today); ?// 輸出: Monday
類型轉換
類型轉換分為隱式轉換和顯式轉換:
// 隱式轉換:從小范圍類型到大范圍類型(安全轉換)
int a = 100;
long b = a; ?// int 可以隱式轉換為 long
?
// 顯式轉換(強制轉換):從大范圍類型到小范圍類型(可能丟失數據)
double x = 3.14;
int y = (int)x; ?// 輸出: 3(截斷小數部分)
?
// 轉換方法
string numStr = "123";
int num = int.Parse(numStr); ?// 字符串轉整數
bool success = int.TryParse(numStr, out int result); ?// 安全轉換
?
// 引用類型轉換
object obj = "Hello";
string str = (string)obj; ?// 強制轉換
string safeStr = obj as string; ?// 安全轉換(失敗返回 null)
可空類型
可空類型允許值類型存儲 null
值,適用于可能沒有值的場景:
// 聲明可空值類型
int? nullableInt = null; ?// int 類型可空
DateTime? nullableDate = null; ?// DateTime 類型可空
?
// 使用可空類型
if (nullableInt.HasValue)
{Console.WriteLine(nullableInt.Value); ?// 獲取值
}
else
{Console.WriteLine("Value is null");
}
?
// 空合并運算符(??)
int value = nullableInt ?? 0; ?// 如果 nullableInt 為 null,則返回 0