一、前言
這篇文章將會講述 Unity C# 中關於 Interface (介面/接口)的基本介紹以及原理說明,最後提供完整的使用流程。
二、介面 | Interface
我在撰寫程式的這段時間中,其實我都沒有使用介面,但依然認為這是必須要學習的知識,因為實在有太多地方講述介面的用處了,正式學習後,我更加堅定這股想法了。
a. 簡介
定義一個規範,讓之後的程式腳本在實作時遵守結構,並且實作出各自不同的細節,其他程式也能通過抓取介面,來取得定義好的屬性與函式。
b. 抽象
這是我接觸的第一個抽象資料型態,我發現抽象能處理的事情會比實作還要多不少,不過在前期的規劃與流程中,會複雜很多並且難以理解。
抽象的資料型態,除了 Interface 以外,還有 Abstract 、 Virtual 這兩個資料型態有印象可以學習,搜尋資料後,還有 Generic 、Delegate 可以學習,期中委派已經有了解部分了。
c. 用途
在遊戲設計中,我自己判斷介面的用途偏向於抓取,不過相較於普通的抓取物件來說,介面的便利性與效能都更加優秀,唯一的問題可能是需要規劃,這容易造成後期不好維護。
三、原理說明
接下來會從名稱與特色說明 Interface 的運作原理。
a. 介面與接口
這是我繪製的示意圖,可以簡單理解介面的原理:第一點,只要實作同一個介面的程式腳本,裡面一定會出現相同的資料結構;第二點,其他程式腳本能以此介面名稱為接口,不需要抓取整個物件,也不需要知道其他程式內容。
b. 抽象與實作
這兩個概念最大的差異,就是能不能直接指定到一個明確的物件,以介面這個資料型態來解釋,就是它沒有明確的某一個功能,因此能套用到多個物件的程式腳本中。
在程式設計中,會明確到哪一個變數會有哪些變量,因此實作是非常詳細的一種資料結構,也就不容易套用到各種情況了,不過實作因為明確清晰,在程式設計的過程中也相對直觀。
c. 不問其身分
介面的特色,就是「不問身份,只問簽章」的概念,簽章的概念可以在微軟官方的一篇文章找到,簡單來說,簽章是一種規範,只要符合規範的對象就會娶得簽章。
換句話說,只要符合座號(屬性)與學生(函式)的對象,在判斷是不是叫做台灣大學的介面時偷會通過,不需要每一所大學都指定一次,也不需要過問每個大學其他的功能。
四、介面的使用流程
接下來會講述如何使用 Interface 這個資料結構。
a. 創建 Interface 資料結構
首先,創建一個 Interface,因為跟類別(Class)的結構相同,所以只需要公有或私有以及資料結構,再搭配一個程式碼區塊就可以了。
b. 定義屬性
接下來,定義一個擁有讀寫設定的屬性(property),關於讀跟寫的介紹,在之前的一篇文章我有介紹,如果了解屬性的概念,直接撰寫自己需要的屬性有哪些即可。
c. 定義函式
在這裡定義函示名稱即可,一樣依照需求安排數量。
d. 實作介面
接下來,打開想要實作介面的類別,並且在 Unity 內建的實作類別 Monobehaviour 後面,打上一個「,」後添加自己撰寫的介面名稱。
e. 履行簽章
隨後,在這個程式腳本中開始履行簽章,把前面定義好的屬性以及函式一一撰寫出來,屬性就要用讀跟寫與自己私有變數的關係,這些變數通常會在前面添加「_(底線)」用於表達這是用於介面的變數,函式的話,只要名稱正確,其他就跟宣告其他函式相同。
f. 完成
這樣就完成介面的創建與實作了,在其他腳本就可以像是呼叫某個物件一樣來呼叫介面,並且可以抓取實作後介面的屬性與函式,進行兩個資訊的交換,不用一一指定。
五、後記
這篇文章對我來說,是一個跨階段的成長,因為我更了解怎麼介紹一個新的概念,並且能寫出完整的製作流程,學習到了一些新的名詞以後,未來我也可以藉由這篇文章來複習,對於其他新手程式設計師,也有足夠的用處。
a. ChatGPT 與 Google 兩種蒐尋軟體的結合
在撰寫這篇文章的時候,我的資料參考除了微軟的官方,我還有去詢問GPT我應該要怎麼撰寫,我聽到介面是實作而不是繼承的時候,我以為人工智慧終於出錯了,直到我找到官方文件,也是叫他實作,或許這種也稱為繼承?
b. 保持質疑的態度
學習知識的過程,最重要的是保持質疑的態度,先不說會不會讓你找到正確答案,但在這個過程中絕對可以接觸更多的相關知識,也能理解更多彼此相互印證的資訊。
c. 重新開始經營 Youtube 了
感謝你看完這篇文章,不知道它對你的幫助有多少呢?這是我在學習介面時撰寫的程式碼與測試內容,如果想了解更具體的介面測試影片,可以參考下面這部影片。