-
关于委托和Set/Get的定义之类,就不说啦,下面只写了具体代码.希望对初学者有所帮助.
-

public class Car
{
private string name = "BMW";
private string color="While";

public delegate void ColorChangeHandler(string myColor); //事先声明一个委托,也可以在类的外部声明委托类型
public event ColorChangeHandler ColorChange; //声明一个事件并指定它的委托类型

public string Name
{
get
{
return name;
}
set
{
name = value;
}
}

public string Color
{
get
{
return color;
}
set
{
color = value;
if (ColorChange != null) // 如果有对象注册
{
ColorChange(this.color); // 调用所注册对象的方法
}
}
}

public string GetCarInfor(string name, string color)
{
return "This car is s " + name + ",Color is " + color;
}
}

protected void Page_Load(object sender, EventArgs e)
{
Car car = new Car();
car.ColorChange += new Car.ColorChangeHandler(car_ColorChange);//先注册事件再赋值
//car.Name默认为"BMW"
car.Color = "Black";
}

void car_ColorChange(string color)
{
Response.Write("Now,car color is " + color + ",事件执行啦 !");
}
备注:
(一)委托
A)委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
B)给委托绑定一个方法,语法是“+=”,取消对方法的绑定,语法是“-=”:
C)使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
CarChangeHandler delegate1 = new CarChangeHandler(car_ColorChange);
delegate1 += car_NameChange; // 给此委托变量再绑定一个方法
//或
CarChangeHandler delegate1;
delegate1 = car_ColorChange; // 第一次用的是“=”,绑定语法。
delegate1 += car_NameChange; // 给此委托变量再绑定一个方法,这次用的是 “+=”,绑定语法。
(二)Get/Set访问器
A)属性按如下方式,根据所使用的访问器进行分类:
只带有 get 访问器的属性称为只读属性。无法对只读属性赋值。
只带有 set 访问器的属性称为只写属性。只写属性除作为赋值的目标外,无法对其进行引用。
同时带有 get 和 set 访问器的属性为读写属性。
B)在属性声明中,get 和 set 访问器都必须在属性体的内部声明。
它的用途: 一般是对类里面的变量进行操作. 而不是直接对类的变量进行操作。
上面例子通过GET和SET对Car类中公有变量Color进行读写操作,实际就是间接更改color私有变量的值,
当然,如果你不想让用户对color修改,就不要提供set方法.
C)属性的真实作用不只是为了更改某个成员变量的值,另外一个很大的作用就是: 便于维护.
比如:如果一个类的一个变量int a ,在其它包或命名空间类中使用了1000次,但是过了许久,你想把a改为b,
如果直接对变量a操作的话,就得需求修改整个程序的1000处. 如果用属性了,就不会了,只需改这个方法即可.
{
set
{
a = value;
}
get
{
return a;
}
}
//改为:
public int B
{
set
{
b = value;
}
get
{
return b;
}
}
除去这个属性之外的地方根本不需要改变.

浙公网安备 33010602011771号