今天要來說說方法的建立和事件
首先是方法該如何建立呢?假設我們要替car類別定義一個move方法,程式碼如下:
namespace project
{
class car
{
private int _x, _y;
public void move(int x, int y)
{
_x = x;
_y = y;
}
}
internal class Program
{
static void Main(string[] args)
{
car car = new car();
car.move(100, 200);
}
}
}
沒錯,只要定義一個包含兩參數的公開move方法就可以了,是不是很簡單阿~~不過如果要配合之前定義的speed屬性,另外定一個加速accelerate方法,就會出現一些缺點,由於speed屬性範圍在0~200之間,因此speed和accelerate都需各做一次範圍檢查。
namespace project
{
class car
{
private int _speed;
public int speed
{
get
{
return _speed;
}
set
{
if (value < 0)
value = 0;
else if (value > 200)
value = 200;
else
_speed = value;
}
}
public void accelerate()
{
speed++;
if (_speed > 200)
_speed = 200;
}
}
internal class Program
{
static void Main(string[] args)
{
car car = new car();
car.speed = 199;
Console.WriteLine("now speed:{0}", car.speed);
Console.WriteLine("speed++");
car.accelerate();
Console.WriteLine("now speed:{0}", car.speed);
Console.WriteLine("speed++");
car.accelerate();
Console.WriteLine("now speed:{0}", car.speed);
}
}
}
可以將上面的accelerate改成這樣
public void accelerate()
{
this.speed++;
}
this代表物件本身自己,也就是使用物件本身的speed屬性,會先自動呼叫到speed屬性的get取得目前值,再自動呼叫speed的set設定新值,由於本身就設計處理範圍,因此用accelerate來加速時,最高只會到200,不會超出範圍。
如果假設希望car中的accelerate能夠有多種加速方式,如:
accelerate();
accelerate(50);
accelerate("STOP")
那就把程式碼car類別裡面accelerate改寫成如下:
public void accelerate()
{
this.speed++;
}
public void accelerate(int addspeed)
{
this.speed += addspeed;
}
public void accelerate(string str)
{
if(str == "STOP")
this.speed = 0;
}
再來我們談談事件(Event)
事件的定義跟處理流程算是目前為止最複雜的部份了,在此前得先要了解如何在類別中宣告事件,事件類似方法,但差別是方法中我們必須先定義好所需執行的程式碼,而事件則是在宣告物件時才由設計者針對自己的需求撰寫事件。用之前car的程式來示範,假設我們要做超過200時給警告,程式碼如下:
namespace project
{
delegate void DangerEvent(int vspeed); //宣告delegate型別
class car
{
private int _speed;
public event DangerEvent Danger; //宣告事件
public int speed
{
get
{
return _speed;
}
set
{
if (value < 0)
value = 0;
else if (value > 200)
if (Danger != null) //啟動事件
Danger(value);
_speed = value;
}
}
public void accelerate()
{
speed++;
}
}
internal class Program
{
static void TooFast(int vspeed)
{
Console.WriteLine("now speed:{0},toofast", vspeed);
}
static void Main(string[] args)
{
car car = new car();
car.Danger += new DangerEvent(TooFast); //指定Danger事件由TooFast方法處理
car.speed = 199;
Console.WriteLine("now speed:{0}", car.speed);
Console.WriteLine("speed++");
car.accelerate();
Console.WriteLine("now speed:{0}", car.speed);
Console.WriteLine("speed++");
car.accelerate();
Console.WriteLine("now speed:{0}", car.speed);
}
}
}
好啦,方法跟事件就到這邊告一段落啦
大家掰掰~~