一:重写是指重写基类的方法,在基类中的方法必须有修饰符virtual ,而在子类的方法中
必须指明override.
格式:
基类中:
public virtual void myMethod()
{}
子类中:
public override void myMethod()
{}
重写后,基类和子类对象访问myMethod()方法,结果都是子类重新定义后的方法,基类的方法相当
于被覆盖掉了。
二:重载
用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳成员来实施调用。
public void test(int x,int y ) {}
public void test(int x,ref y ) {}
public void test(int x,int y,string a ) {}
注:可考虑用泛型优化此用途。
三:多态性概述
当派生类从基类继承时,它会获得基类的所有方法、字段、属性和事件。若要更改基类的数据和行为,您有两种选择:可以使用新的派生成员替换基成员,或者可以重写虚拟的基成员。
使用新的派生成员替换基类的成员需要使用 new 关键字。如果基类定义了一个方法、字段或属性,则 new 关键字用于在派生类中创建该方法、字段或属性的新定义。new 关键字放置在要替换的类成员的返回类型之前。例如:
public class BaseClass
{
public void DoWork() { }
public int WorkField;
public int WorkProperty
{
get { return 0; }
}
}
public class DerivedClass : BaseClass
{
public new void DoWork() { }
public new int WorkField;
public new int WorkProperty
{
get { return 0; }
}
}
使用 new 关键字时,调用的是新的类成员而不是已被替换的基类成员。这些基类成员称为隐藏成员。如果将派生类的实例强制转换为基类的实例,就仍然可以调用隐藏类成员。例如:
DerivedClass B = new DerivedClass();
B.DoWork(); // Calls the new method.
BaseClass A = (BaseClass)B;
A.DoWork(); // Calls the old method.