在程式語言中,「初始化」(Initialization)是指在物件被建立(實例化)時,為它的屬性(Properties) 和 狀態(State) 設定初始值的過程。這是一個物件準備好可以被使用的重要步驟。
初始化的核心意義
- 設定屬性的初始值
- 當物件被創建時,系統會分配記憶體,並根據類別的設計給屬性賦予默認值或自定義的初始值。
- 如果屬性未被初始化,則它們通常會保留程式語言的預設值(例如,C# 中的數字為
0
,字串為null
)。
- 物件處於可用狀態
- 初始化的目的是讓物件進入一個一致且可用的狀態,避免物件在未設定值或配置不完整時使用,從而導致執行錯誤。
C# 中的初始化方式
在 C# 中,初始化通常透過以下幾種方式進行:
1. 預設值初始化
類別的屬性會自動獲得語言的預設值,這是最基本的初始化方式。
public class Dog
{
public string Name; // 預設為 null
public int Age; // 預設為 0
}
當物件被實例化後:
Dog myDog = new Dog();
Console.WriteLine(myDog.Name); // 輸出:null
Console.WriteLine(myDog.Age); // 輸出:0
2. 使用類別的建構函式
建構函式(Constructor)是類別的特殊方法,用於在物件被創建時執行初始化邏輯。
範例:
public class Dog
{
public string Name;
public int Age;
// 建構函式
public Dog(string name, int age)
{
Name = name;
Age = age;
}
}
當你初始化物件時:
Dog myDog = new Dog("Buddy", 3);
Console.WriteLine(myDog.Name); // 輸出:Buddy
Console.WriteLine(myDog.Age); // 輸出:3
這裡,建構函式 Dog(string name, int age)
負責初始化屬性 Name
和 Age
,保證物件的屬性有正確的初始值。
3. 使用物件初始化器
C# 提供了物件初始化器語法,允許你在實例化後直接設定屬性值,這是一種簡化初始化的方式。
範例:
public class Dog
{
public string Name { get; set; }
public int Age { get; set; }
}
使用物件初始化器:
Dog myDog = new Dog
{
Name = "Buddy",
Age = 3
};
Console.WriteLine(myDog.Name); // 輸出:Buddy
Console.WriteLine(myDog.Age); // 輸出:3
這種方式省略了明確的建構函式調用,讓程式碼更簡潔。
4. 使用屬性或欄位的初始值
在類別內部直接為屬性或欄位賦值,提供一個初始值。
範例:
public class Dog
{
public string Name { get; set; } = "Unknown";
public int Age { get; set; } = 1;
}
當實例化時:
Dog myDog = new Dog();
Console.WriteLine(myDog.Name); // 輸出:Unknown
Console.WriteLine(myDog.Age); // 輸出:1
初始化的完整流程
以 new Dog()
為例,物件初始化時經歷以下步驟:
- 分配記憶體:系統為物件分配記憶體,這段記憶體用於存儲物件的屬性和狀態。
- 屬性初始化:
- 如果屬性有預設值(例如
public int Age = 1;
),則設置為預設值。 - 如果使用建構函式,則依據建構函式邏輯設定屬性值。
- 物件進入可用狀態:物件的屬性值和行為都已準備妥當,可以開始使用。
初始化 vs 實例化
雖然「實例化」和「初始化」常常一起出現,但兩者有細微的區別:
- 實例化(Instantiation):
- 是指「創建一個物件」的過程。
- 對應於
new
關鍵字後的整個動作。 - 核心是讓物件在記憶體中有具體的存在。
- 初始化(Initialization):
- 是「設定物件屬性初始值」的過程。
- 通常是實例化過程的一部分,但可以分開,例如在物件被實例化後進一步初始化。
- 核心是保證物件的狀態正確且一致。
具體例子:DatabaseConnection 的初始化
以資料庫連線為例:
public class DatabaseConnection
{
public string ConnectionString { get; set; }
public bool IsConnected { get; private set; }
public DatabaseConnection(string connectionString)
{
ConnectionString = connectionString;
IsConnected = false;
}
public void Connect()
{
if (!string.IsNullOrEmpty(ConnectionString))
{
IsConnected = true;
Console.WriteLine("Connected to database.");
}
}
}
實例化並初始化:
DatabaseConnection connection = new DatabaseConnection("Server=myServer;Database=myDB;");
connection.Connect();
步驟:
- 實例化:
- 系統創建一個
DatabaseConnection
物件。 - 記憶體中分配空間,存放屬性
ConnectionString
和IsConnected
。
- 初始化:
- 建構函式將
ConnectionString
設定為"Server=myServer;Database=myDB;"
。 - 預設將
IsConnected
設定為false
。
總結
- 初始化 是物件創建後設定其屬性和狀態的過程,確保物件可以被正確使用。
- 它通常是實例化的一部分,但可以額外執行。
- C# 提供多種初始化方式,例如建構函式、物件初始化器、屬性預設值等。
- 對於資料庫連線等情境,初始化意味著設定連線字串和連線狀態等必要屬性。
「一切從零開始,
未命名的風穿越海面,
語言的種子落入時間,
初生之光,給世界一個方向。」
——楊牧,《起源之書》