[問題] delegate & event
剛剛看 "Visual C# 2010 程式設計經典" 裡面的一段委派的範例
試著新增一些功能,結果出現下面這一段錯誤
無法將型別 'appDelPractice.SlowSpeedEvent'
隱含轉換為 'appDelPractice.DangerEvent'
主要想將原本 DangerEvent 綁定一個事件改為兩個事件
片段程式碼如下:
delegate int DangerEvent(int vSpeed);
delegate void SlowSpeedEvent(int vSpeed);
public partial class Form1 : Form
{
int TooFast(int vSpeed)
{
MessageBox.Show(String.Format("你目前的速度為{0},
超過200 請減速慢行!!", vSpeed));
return 100;
}
void TooSlow(int vSpeed)
{
MessageBox.Show(String.Format("您目前行駛速度{0}已低於限速80,
請加速行駛", vSpeed));
}
private void button1_Click(object sender, EventArgs e)
{
Car Benz = new Car();
Benz.Danger += new DangerEvent(TooFast);
Benz.Danger += new SlowSpeedEvent(TooSlow);
Benz.Speed = 22;
MessageBox.Show(String.Format("汽車智慧系統自動減速至
{0}!!", Benz.Speed));
}
}
class Car
{
private int _speed; //區域變數
public string sName { get; set; }
public event DangerEvent Danger;
public int Speed
{
get
{
return _speed;
}
set
{
if (value > 200)
{
if (Danger != null)
value = Danger(value);
}
else if(value < 80)
{
if (Danger != null)
value = Danger(value);
}
_speed = value;
}
}
}
最近剛從 寫vb6 改為 寫C#
關於一些物件導向的一些觀念還蠻薄弱,
如果各位先進覺得我問的東西太基本還請見諒
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.147.7
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1439045725.A.BA4.html
※ 編輯: jodo1984 (114.39.147.7), 08/08/2015 22:56:42
→
08/08 23:15, , 1F
08/08 23:15, 1F
→
08/08 23:16, , 2F
08/08 23:16, 2F
→
08/08 23:17, , 3F
08/08 23:17, 3F
改回來變成這樣子, 但又遇到另一個問題
我想要程式自行判斷去呼叫 TooFast 或 TooSlow
但是當我設定 Benz.Speed = 22; 時
雖然進入Car class 跑到
else if(value < 80)
{
if (Danger != null)
value = Danger(value);
}
但是卻變成TooFast與TooSlow 都會各執行一遍
有辦法可以只執行TooFast 或 TooSlow 嗎?
修正後程式碼
private void button1_Click(object sender, EventArgs e)
{
Car Benz = new Car();
Benz.Danger += new DangerEvent(TooFast);
Benz.Danger += new DangerEvent(TooSlow);
Benz.Speed = 22;
}
class Car
{
private int _speed; //區域變數
public string sName { get; set; }
public event DangerEvent Danger;
public int Speed
{
get
{
return _speed;
}
set
{
if (value > 200)
{
if (Danger != null)
value = Danger(value);
}
else if(value < 80)
{
if (Danger != null)
value = Danger(value);
}
_speed = value;
}
}
}
※ 編輯: jodo1984 (114.39.147.7), 08/08/2015 23:36:57
推
08/09 10:14, , 4F
08/09 10:14, 4F
推
08/09 10:46, , 5F
08/09 10:46, 5F
推
08/09 11:59, , 6F
08/09 11:59, 6F
→
08/18 18:07, , 7F
08/18 18:07, 7F
討論串 (同標題文章)