前面在C#虚函数的文章里提到了重写(override), 虚函数和重写实现了面向对象语言在运行阶段的多态性, 而重载实现了在编译阶段的多态性.
重写(override)
重写指的是当父类中有抽象函数或虚函数时, 在子类中实现或重新实现了这些函数, 就完成了对父类函数的重写, 当对象的实例类为子类时, 调用的函数是子类中重写的函数. 重写使用关键字override, 要求重写函数的函数名, 返回值, 参数列表与被重写的函数完全相同.
代码来了!
public class GoodClass
{
public virtual void GoodFunc()
{
Console.WriteLine("This is a good function!!!");
}
}
public class NiceClass : GoodClass
{
public override void GoodFunc()
{
Console.WriteLine("This is a nice function");
}
}
public abstract class GreatClass
{
public abstract void GreatFunc();
}
public class FineClass : GreatClass
{
public override void GreatFunc()
{
Console.WriteLine("Have a good day");
}
}
重载
重载指的是在一个类中, 有一系列相同函数名, 不同参数列表, 不同返回类型(非强制要求)的函数, 在编译时, 根据传参情况来选择最佳的的函数. 当两个函数函数名相同, 参数列表相同, 只有返回值不同时会有报错, 此时不构成重载. 参数列表顺序不同也不构成重载.
代码来了!
public class GoodClass
{
private void GoodFunc(int a){}
private void GoodFunc(int a,int b){}
private void GoodFunc(double c){}
private int GoodFunc(int a,double b)
{
return a;
}
}
2638

被折叠的 条评论
为什么被折叠?



