終於在這週上完最後一天的OOP課程
發文會拖到現在其實主要有兩個原因
一是目前在當兵,在部隊內是無法使用電腦
二是昨天晚上掛急診確定是A流
因為人不舒服,所有就沒有馬上發文了
這些都是題外話
今天要來跟大家聊聊事件與建構式
續上次講完委派之後
我們接下來要講Event跟建構式
相信大家都知道 Event 中文翻譯叫做事件
事件Event
簡單來說Event相依於delegate
也就是說事件Event在C#中是個關鍵字,相依於委派
那麼沒有Event就不能使用委派嗎?
相信在前幾次的文章有提到,我使用委派也沒用到Event
ㄧ樣可以Work,至於要不要用這個Event我覺得是個人自己的決定
簡單來說Event相依於delegate
也就是說事件Event在C#中是個關鍵字,相依於委派
那麼沒有Event就不能使用委派嗎?
相信在前幾次的文章有提到,我使用委派也沒用到Event
ㄧ樣可以Work,至於要不要用這個Event我覺得是個人自己的決定
public class Class1
{
//EventHandler 是一個委派型別
public EventHandler XChanged
{
get; set; //使用get set 表示我可以去存取這個委派 ,這是一個沒有用Event關鍵字的方式
}
private void OnXChanged()
{
if (XChanged != null)
{
XChanged.Invoke(this, new EventArgs());
//委派使用Invoke();
//而這邊的參數一個是object一個是EventArgs
//可以參考EventHandler
}
}
private int _x;
public int X
{
get { return _x; }
set
{
if (_x != value)
{
_x = value;
OnXChanged();
//透過外面改變_x值,觸發set引發OnXChanged方法
//而就會叫用到這個委派
//PS:當然你要從外面註冊一個相同的委派事件給XChanged
//否則XChanged還是會等於null喔!!
}
}
}
public class Class1
{
public event EventHandler XChanged; //這邊就使用Event關鍵字
private void OnXChanged()
{
if (XChanged != null)
{ XChanged(this, new EventArgs()); }
}
private int _x;
public int X
{
get { return _x; }
set
{
if (_x != value)
{
_x = value;
OnXChanged();
}
}
}
}
所以其實說穿了Event就是一個比較方便的寫法
建構式Constructor
其實相信建構式我不用多講什麼
大部分的人都知道建構式在幹嘛
但是我今天要來講的是建構式的觀念!!!!
1、建構式的名稱會跟你的類別名稱相同
2、它們通常用來初始化新物件的資料成員
3、如果你預設沒寫建構式,程式執行的時候會自動生成一個無參數的建構式(只是你不知道而已)
4、建構式不會繼承
5、建構式如果使用Private存取修飾詞,則在該類別外部的呼叫者無法直接使用 new 運算子建立此類別的執行個體
6、千萬不要在建構是呼叫虛擬方法 (看情況)
7、new類別成立一個執行個體,並不會先去執行建構式,而是先分配記憶體(切記)
其實相信建構式我不用多講什麼
大部分的人都知道建構式在幹嘛
但是我今天要來講的是建構式的觀念!!!!
1、建構式的名稱會跟你的類別名稱相同
2、它們通常用來初始化新物件的資料成員
3、如果你預設沒寫建構式,程式執行的時候會自動生成一個無參數的建構式(只是你不知道而已)
4、建構式不會繼承
5、建構式如果使用Private存取修飾詞,則在該類別外部的呼叫者無法直接使用 new 運算子建立此類別的執行個體
6、
7、new類別成立一個執行個體,並不會先去執行建構式,而是先分配記憶體(切記)
public class Person
{
private string last;
private string first;
public Person(string lastName, string firstName)
{
last = lastName;
first = firstName;
}
//這是一個最基本的範例
//透過建構式去對Class欄位做賦值的動作
//所以這邊使用兩個參數的建構式之後,若自己沒寫無參數的建構式
//系統則不會再幫您產生無參數的建構式!!
}
接下來這個範例就是告訴大家不要在建構式呼叫虛擬方法
假設我寫 Truck truck = new Truck( );
就會發生下圖的執行順序
假設我寫 Truck truck = new Truck( );
就會發生下圖的執行順序
以上是事件event與建構式Constructors的基本介紹
下一篇會講擴充方法與介面
物件導向課程心得part5