切換
舊版
前往
大廳
主題

資策會Unity課程「C#」Day7 part2

冰劍士-冰雪飛 | 2014-11-01 20:44:11 | 巴幣 2 | 人氣 2705

各位好,本篇所撰寫的是 10/27 Part2的部分

內容上會介紹到「Property」、「Delegate」和「Event」這兩種程式寫作技巧

不過Unity3D在上會不會使用的平凡,這我就不清楚了,熟悉的人可否講解下使用情況?
=====================================================================
Property

這就是 Property 的寫法,有甚麼不同的嗎?在於方法上的寫作我們多了 get、set 這兩個關鍵字
為何我們要使用Property?這樣寫可以把資料封裝在類別中,語法簡潔且更有彈性
而且如此撰寫的話可以確保資料的安全性及方便性

我們來談談 get、set
get 如同途中的註解敘述,這是把內容值給取出,所以會 return 內容值來使用
set 如同途中的註解敘述,將內容值做修改,修改好的東西會丟到 get 做取出動作
雖然說 set 是對內容值做修改,但其實也可以在 get 將內容值做處理

在這邊提一下,有時各位在撰寫程式上使用內建方法時發現到編譯顯示這是唯讀、唯寫屬性
這是因為那個方法就是用Property來寫作,有下列三種情況
可讀寫:如圖中範例所示 get、set 都存在
唯讀:只有 get 的製作
唯寫:只有 set 的製作
通常大部分看到的是可讀寫或唯讀,唯寫基本上用不太到的樣子(我也想不出該怎用)

最後一提,Property沒有位址,方法的參數不可搭配 ref 或 out 等保留字一起使用
=====================================================================
委派Delegate

宣告委派的寫法,使用 delegate 關鍵字,基本上是寫在 class 類別外的,不過裡面並無程式碼
可以看到在 pr 指派時讓 Powerrrrr 代理 Program 來執行 Yaaaaa 方法

ThreadStart 委派

是前請先準備 using System.Threading; 才能使用 TreadStart 委派
這是委派的一種,可以製成 Tread 物件,為何要這樣做?我們先看下執行的小黑畫面



我們可以看到每次執行的樣子都不一樣,而且還是穿插在一個迴圈內在執行迴圈

由於程式碼的執行是由上至下,故這樣寫可以同步處理不同的程式碼
=====================================================================
事件Event

發行者(Publisher)引發事件來通知所有訂閱者
訂閱者(Subscriber)登記事件時遇呼叫的方法

無名(Anonymous)

使用 delegate 關鍵字取代其名稱,這是宣告在方法的方法
因為沒有名稱,所以別人無法呼叫,適合只用來處理事件
=====================================================================
這邊老實講我實在不太會解說,這裡真的很難聽到都有點暈倒

是說Unity3D好像用這些技巧的時機較小?有誰來解答一下?

最後,C#課程就到此為止,接下去的文章會有別的課程的

創作回應

悠浪貓
Property
_
主要的用意在於, 控制別人是否能讀取和修改你的資料
例如玩家的id, 這資料我們通常會設定為protected, 讓外部不能輕易的修改到他
但是外部又需要id來做一些判定
所以這時候就會用get { return 玩家id; }, 來讓外部能看到這個資訊, 卻無法修改他



delegate
_
這就是C++傳說中的Function Pointer, 也就是能把一個函式Function當物件一樣傳遞
這主要是用來讓外部的人能決定內部的判斷和運作方式
能讓你的程式能更靈活

例如我寫 Object Pool 物件庫時 就會很需要這種東西
能讓我由外部來決定Object的產生方式, 回收方式, 和放出的方式
這Object Pool就能變的非常靈活且非常多用途



Event
_
這我就暫時沒用過囉~
不過這種機制也是很常用的
2014-11-01 21:04:37
冰劍士-冰雪飛
感謝補充
2014-11-01 21:31:30

更多創作