一、方法的重载和重写
方法的重写用override,关键字virtual不能与static一起使用,应为静态是属于类层面的,而多态是属于对象层面的。由于抽象关键字实质上便是属于virtual的因而没有必要再加上virtual。
有时候可能会涉及到子类隐藏基类的方法, 其目的是当基类中方法没有用virtual来修饰,并且子类还想进行重新涉及时,需要在子类中进行扩展,此时需要修改基类中的方法,这个时候我们可以在子类中对于相同名称的方法用new来修饰,从而达到隐藏基类的方法。
例如
public new void print()
{
console.writeline("这是子类隐藏基类的方法");
}
二、委托和事件
委托主要用于回调机制和事件处理,委托实际上是一种引用类型,类似于指针,只不过是完全面向对象的,委托是对具有匹配参数的方法的调用,委托允许程序设计人员在执行传入期传入方法名,实现方法的动态调用。2.委托可以在类内部定义也可以在类的外部定义,但是委托对象必须在类的内部或方法体内定义。
pubic deletgate string mydelegate (int a);
public string method (int a)
{
int s=a;
string str=convert.tostring(s);
return str;
}
mydelegate d=new mydelegate(method);
2.多重委托
委托不仅仅可以关联一个与之匹配的方法,还可以引用多个与之匹配的方法,这称为多重委托,其真正的实现是用+=来完成的。多重委托关联多个方法,但是最终返回的结果还是最后一个方法的结果,执行顺序是根据方法的先后进行调用。
3.事件
事件是发生某些动作时,向其它对象发送消息的一种方式。在c#中事件是依靠委托来实现的,事件作为类的方法成员之一,如果想让委托对象拥有跟方法一样的地位,则需要在定义委托对象的前面加上event,这就成为了一个事件。事件一般关联两个对象,触发事件对象----发送方,被通知对象----接受方。
public delegate void mydelegate();
class program
{
static void main()
{
A=new A();
A.d+= new mydelegate(new program().show);
A.run();
}
public void show()
{
console.writeline("这是事件的触发");
}
}
class A
{
public event mydelegate d;//事件
public void run()
{
d();
}
}
委托是c#中事件的处理方式,委托是一种引用类型,而事件又是一种特殊的委托。触发事件,执行事件关联的处理函数,完成相应的功能。