c#编程时为什么要用虚方法
发布网友
发布时间:2024-03-26 14:59
我来回答
共2个回答
热心网友
时间:2024-09-15 09:59
因为要实现多态,当子类需要重写父类方法的时候,就需要它是虚方法,当有N个子类重写了父类方法就有N种实现,从而现实了多态
例如
父类中用于问好的方法Hello
class Person
{
public virtual void Hello() { Console.WriteLine("你好"); }
}
现在有两个子类分别是Student和Teacher(假设他们必须这样说)
那Student问好就该说,老师好
而Teacher问好就该说,同学好
所以就需要重写了
class Student
{
public override void Hello() { Console.WriteLine("老师好"); }
}
Teacher里面就是,同学好
基本上就这个意思,具体的用法多种多样,看你的需求了
热心网友
时间:2024-09-15 09:56
给你个最简单的例子:
namespace Some
{
class My
{
//Method1
public new string ToString()
{
return "MyString()";
}
//Method2
// public override string ToString()
// {
// return "MyString";
// }
}
}
My my=new My();
Console.Write(my);
用Method1,你以为会输出什么?MyString?
会输出Some.My
只有Method2会输出MyString
为什么?
显然,肯定不存在Console.Write(My)方法 //系统定义这个方法时,根本不知道My的存在
你调用的其实是:Console.Write(object)方法
换句话说,其实是这样:
My my=new My();
object obj=my;
Console.Write(obj);
现在知道了吧,虽然是子类的对象,但是是由基类的引用来引用的,你如果不用override来重写,系统根本不可能去调用你定义的方法,而是去调用在object中定义的ToString方法,于是输出了类名