第67節 - Unity: C# Get & Set Modifier
這一節我會介紹 Unity: C# Get & Set Modifier,屬性(Property)的get和set部分稱為Accessor(存取子)。簡單來說,set存取子用來給屬性賦值,之後就可以用get存取子存取屬性的值,我會在這節詳細介紹。
這一節主要介紹以下內容:
1: Create Your Own Getter & Setter Methods
2: Create Field & Property
3: Create Auto Property
4: Application of Get & Set Modifier
1.0) Get & Set Modifier
以下例子會介紹三個Get & Set的不同寫法,但執行結果是一樣的,如下圖:
- 建立一個新Project 。
- 建立三個Script。
- 把三個Script拖放到Main Camera內。
1.1) Create Your Own Getter & Setter Methods
例子一會建立自己的setGender()方法給屬性賦值,再建立getGender()方法存取屬性的值,如下圖:
- 建立一個類別 - Gender。
- 建立一個private field(域) - gender。
- 建立一個getGender()方法,它用來存取private field - gender的值。
- 建立一個setGender()方法,它用來給private field - gender賦值。
- 建立一個Gender類別物件 - g1,
用setGender()方法給private field - gender賦值(Male),用getGender()方法存取private field - gender的值(Male),再顯示在電腦屏幕上。
注意1: 大家可以發現,當執行getGender()和setGender()方法時,private field - gender是完全不須理會,只會在內部用到。
注意2: 就因為private field - gender是完全不須理會,只會在內部用到,這就是所謂Encapsulation(封裝),大家只可以設定自己的Gender類別物件 - g1,而不能接觸到private field - gender,達到安全的程式結構。
1.2) Create Field & Property
例子二會建立一個Property(屬性),再在Property內建立get和set存取子,如下圖:
- 建立一個類別 - Gender。
- 建立一個private field(域) - gender。
- 建立一個public property(屬性) - MyGender,在MyGender屬性內建立get和set存取子。
- 建立一個Gender類別物件 - g1,
用setGender()方法給private field - gender賦值(Female),用getGender()方法存取private field - gender的值(Female),再顯示在電腦屏幕上。
注意1: 大家可以發現,當執行getGender()和setGender()方法時,private field - gender是完全不須理會,只會在內部用到。
注意2: 就因為private field - gender是完全不須理會,只會在內部用到,這就是所謂Encapsulation(封裝),大家只可以設定自己的Gender類別物件 - g1,而不能接觸到private field - gender,達到安全的程式結構。
1.3) Create Auto Property
例子三會建立一個Auto Property(自動屬性),再在Auto Property內建立get和set存取子,如下圖:
注意: C# 6之後,可使用這個新的「自動屬性初始設定式」(Auto-Property Initializers)來簡化。
- 把例子二的程式碼刪除。
- 建立一個Auto Property - MyGender,在MyGender屬性內建立get和set存取子。
- 建立一個Gender類別物件 - g1,
用setGender()方法給private field - gender賦值(Female too),用getGender()方法存取private field - gender的值(Female too),再顯示在電腦屏幕上。
注意1: 大家可以發現,當執行getGender()和setGender()方法時,private field - gender是完全不須理會,只會在內部用到。
注意2: 就因為private field - gender是完全不須理會,只會在內部用到,這就是所謂Encapsulation(封裝),大家只可以設定自己的Gender類別物件 - g1,而不能接觸到private field - gender,達到安全的程式結構。
1.4) Result
- 三個程式的執行結果。
2) Application of get & set Modifier
以上三個例子的執行結果相同,但大家可能會問在編寫遊戲程式時,get和set實際上有甚麼用?
我在第54節 - Java: Blackjack Card Game介紹過以下例子:
- 我們的眼睛會自動把撲克牌的資料傳入大腦;
- 但是電腦程式就要我們主動把"A"和"Spade"傳入電腦,Java程式可以用getValue()和getSuit()方法主動把"A"和"Spade"傳入電腦;
- 最後用toString()方法顯示在屏幕上。
注意: 以上例子沒有用上setValue()和setSpade()方法,因為我用了ArrayList<T>的add()方法,大家可參考第54節 - Java: Blackjack Card Game。