重写(override):
子类中为满足自己的需要来重复定义某个方法的不同实现,需要用 override 关键字,被重写的方法必须是虚方法,用的是 virtual 关键字。它的特点是(三个相同):
- 相同的方法名
- 相同的参数列表
- 相同的返回值
不同与C++多态,C++用虚函数实现动态多态,C#则为重写
public class baseclass {
public virtual void testfun() { Console.WriteLine("testBaseClass"); }
}
public class chirclass:baseclass
{
public override void testfun() { Console.WriteLine("override"); }
}
class TestClass
{
static void Main(string[] args)
{
baseclass baseclass=new baseclass();
baseclass.testfun();
chirclass baseclass2=new chirclass();
baseclass2.testfun();
//用父类的引用构造子类对象
baseclass baseclass1 = new chirclass();
baseclass1.testfun();
}
}
}
小提示:经常有童鞋问重载和重写的区别,而且网络上把这两个的区别作为 C# 做常考的面试题之一。实际上这两个概念完全没有关系,仅仅都带有一个“重”字。他们没有在一起比较的意义,仅仅分辨它们不同的定义就好了。