我一直覺得實例化這個詞在coding的世界很難理解,
code本身就是一個實際存在的東西 (就已經看到它寫在那了)
又不是我在腦海構想一件事,在現實世界沒有實體,
(例如我在腦海想像了一隻狗狗,然後我真的去拿水彩筆畫出來 >> OK這是實例化)
Code到底有什麼好實例化…
(我的接受極限大概是物件導向教學常說的class是藍圖的概念,
但也是有點勉強,不是每個範例都覺得能接受)(毛真多?)
在線上課程看到EF Core介紹有一句話:Instantiates a database connection
真的覺得要瘋掉,
連資料庫不就一樣是一些“已經實際存在“的code,到底在Instantiates什麼?
Table of Contents
Instantiate 的意思
「Instantiate」在程式語言中,通常指的是創建某個類別(class)的實例(instance)。
- 類別(Class) 是一種抽象的藍圖,定義了對象的屬性和行為。
- 實例(Instance) 是基於這個藍圖創建的具體對象。
為什麼說是「實例化」
- 抽象到具體的轉換
雖然程式碼是具體存在的,但類別(例如DatabaseConnection
)本身並不是一個具體的「物件」,而是定義了一個可以創建的物件模型。
當你使用new
關鍵字(例如new DatabaseConnection()
)時,程式會根據類別的定義創建一個具體的記憶體物件,這個過程就稱為實例化。 👉 這類比你提到的「畫一隻狗」的概念:
- 類別 = 狗的設計圖
- 實例化 = 根據設計圖「畫」出一隻狗
- 當程式運行時,物件佔用記憶體並具體執行動作,這時候才算是具體的存在。
當程式運行時,
這句話終於解答我的疑惑,code的世界,實例化就是指記憶體!
物件佔用記憶體並具體執行動作,
這時候才算是具體的存在。
Instantiates 和 database connection 的關係
Instantiates a database connection
:
- 類別(例如
DatabaseConnection
)是一種抽象的定義,描述了如何和資料庫連線,但在程式執行之前它並沒有「具體的行為」。 - 當程式使用
new DatabaseConnection()
時,會根據這個類別的定義:
- 在記憶體中分配空間。
- 初始化相關的屬性和行為。
- 建立和資料庫的實際連線。
- 這樣的過程就是實例化。
因此,「database connection 本來就是一些 code」這種想法,其實只是看到了類別的定義。只有在執行程式並「實例化」這個類別後,才真正和資料庫建立具體的互動。
Instantiate 的意義在 C# 中的應用
- 類別和物件的關係
在 C# 中,DatabaseConnection
是類別,而透過實例化後生成的對象才是真正可用的物件:
DatabaseConnection connection = new DatabaseConnection();
這個程式碼:
- 類別
DatabaseConnection
是抽象的設計圖。 - 變數
connection
是具體的實例,可以被程式操作。
- 實例化的重要性
- 如果你沒有實例化,那麼類別本身無法被使用。類似於你有一個建築圖紙,但沒有建築物可住。
Instantiates
這個詞就用來描述「把抽象的圖紙轉換成具體存在」的過程。
你的疑惑解答
「code 有什麼好實例化,本來就已經是實際的」
- 類別是靜態的,物件是動態的
- 類別的程式碼是靜態存在於你的專案中,它只是描述一種可能的行為。
- 當你實例化時,程式才會在記憶體中分配資源、初始化屬性,讓物件「活」起來。
- 程式碼本身不能代表執行中的行為
程式碼本身是靜態的,而程式在執行後,程式碼定義的結構和行為才會成為現實。這就像你有一個狗的設計圖,只有執行實例化過程,狗才會在「程式世界」中誕生。
替代的理解方式
如果覺得「實例化」這個詞很抽象,可以這樣理解:
- 「Instantiates a database connection」其實是在運行時生成具體的資料庫連線對象。
- 類別 = 定義連線的「工具」。
- 實例化 = 使用這個工具「打開」一個具體的資料庫連線。
這樣的翻譯和概念應該會更容易接受。
小結
- 「Instantiate」= 創建一個具體的物件(物件化)。
- 在程式碼裡,類別是一種抽象,實例化是將抽象的類別轉換成具體的執行對象的過程。
- 與資料庫連線相關時,實例化的目的是讓程式從類別定義生成具體的記憶體對象,並執行連線行為。
「物質的核心,
是光與暗的遊戲,
存在被賦予形式,
形式又回歸空無。」
——楊牧,《解構再造》