重写父类的虚方法有什么作用呢? 重写父类的虚方法有什么作用呢?为什么要重写呢?重写了以后就会把原来的父类中方法的实现都覆盖了这样重写有什么意思呢?搞不明白。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 执行看一下using System;using System.Collections.Generic;public class MyClass{ public static void Main() { Base1 b1=new Base1(); b1.DoSomething(); Sub1 s1 = new Sub1(); s1.DoSomething(); Base1 bs1=new Sub1(); bs1.DoSomething(); Console.WriteLine("******************"); Base2 b2 = new Base2(); b2.DoSomething(); Sub2 s2 = new Sub2(); s2.DoSomething(); Base2 bs2=new Sub2(); bs2.DoSomething(); RL(); } #region Helper methods private static void WL(object text, params object[] args) { Console.WriteLine(text.ToString(), args); } private static void RL() { Console.ReadLine(); } private static void Break() { System.Diagnostics.Debugger.Break(); } #endregion}public class Base1{ public virtual void DoSomething() { Console.WriteLine("From Base1 Execute Dosemething"); }}public class Sub1 : Base1{ public override void DoSomething() { Console.WriteLine("From Sub1 Execute Dosemething"); }}public class Base2{ public void DoSomething() { Console.WriteLine("From Base2 Execute Dosemething"); }}public class Sub2 : Base2{ public new void DoSomething() { Console.WriteLine("From Sub2 Execute Dosemething"); }} 虚函数/方法是为了实现“多态”的效果,那什么叫多态呢? 给你举个例子吧: 有一个基类:class Animal{ ... virtual void Run(); // 虚函数,每个动物“跑”的方式不一样,有个体差异}class Leopard: Animal // 美洲豹{ [virtual] void Run() { // 豹子跑的时候后面两只脚能准确的放到前面两个脚印里,这就是它的“不一样”。 }}class Cock: Animal // 鸡{ [virtual] void Run() { // 鸡只有两条腿,这就是它跑的“不一样”。 }}class Dog: Animal // 狗{ [virtual] void Run() { // 狗的跑。 }}... Other animals// 当你出门旅行去,你必定会遇到动物。所以我们需要定义一个动物的变量Animal* SomeAnimal;//1. 当你看到 Cock 的时候:SomeAnimal = new Cock();// 当你把鸡给赶跑了的时候, 鸡跑的动作发生了:SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“鸡的跑”//2. 当你看到 Dog 的时候:SomeAnimal = new Dog();// 当你把Dog给赶跑了的时候, Dog跑的动作发生了:SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“Dog的跑”//3. 当你遇到流氓的时候:SomeAnimal = new Gangster();// 当你把流氓给赶跑了的时候, 流氓跑的动作发生了:SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“流氓的跑”......从上面你都可以看到,我们通过调用基类的虚函数,就达到了我们想要的效果——去根据具体情况做不同的事。这就是多态,它就是通过虚函数来实现的。现在,你应该对虚函数有概念了吧。 比如一个人的类(person)有一个的吃的方法(eat)。它可以派生出穷人,富人,好人,坏人各种子类。他们每个人都要吃,但是吃的内容,吃的姿势都不同,所以要重写吃这个方法才能显示每个子类的不同。重写并没有覆盖父类的方法。6楼的程序告诉你什么情况会调用父类的方法。 可以调父类的方法 父类a aa=new 父类a();调用子类的方法 父类a aa=new 子类(); 急急急!!这个软件该怎么设计,如何架构 父窗口 子窗口 ado简单的添删改操作 CuteEdit编辑问题 在VS2005中用c#想求平方根,该怎么做? c# 如何跟踪调试 dll ,我从来没有跟踪过,大哥们指点一下了???????????? 下载??? 如何读取word文件的一行内容,以及如何将字符串内容写入word文件中 请问哪有好的正则表达式的创建和测试工具?麻烦地址告诉我,急等 请指教! [攒分贴]每日小知识 SCSF 运行问题
using System.Collections.Generic;public class MyClass
{
public static void Main()
{
Base1 b1=new Base1();
b1.DoSomething();
Sub1 s1 = new Sub1();
s1.DoSomething();
Base1 bs1=new Sub1();
bs1.DoSomething();
Console.WriteLine("******************");
Base2 b2 = new Base2();
b2.DoSomething();
Sub2 s2 = new Sub2();
s2.DoSomething();
Base2 bs2=new Sub2();
bs2.DoSomething(); RL();
}
#region Helper methods private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
} #endregion
}public class Base1
{
public virtual void DoSomething()
{
Console.WriteLine("From Base1 Execute Dosemething");
}
}public class Sub1 : Base1
{
public override void DoSomething()
{
Console.WriteLine("From Sub1 Execute Dosemething");
}
}public class Base2
{
public void DoSomething()
{
Console.WriteLine("From Base2 Execute Dosemething");
}
}public class Sub2 : Base2
{
public new void DoSomething()
{
Console.WriteLine("From Sub2 Execute Dosemething");
}
}
给你举个例子吧:
有一个基类:
class Animal
{
...
virtual void Run(); // 虚函数,每个动物“跑”的方式不一样,有个体差异
}class Leopard: Animal // 美洲豹
{
[virtual] void Run()
{
// 豹子跑的时候后面两只脚能准确的放到前面两个脚印里,这就是它的“不一样”。
}
}class Cock: Animal // 鸡
{
[virtual] void Run()
{
// 鸡只有两条腿,这就是它跑的“不一样”。
}
}class Dog: Animal // 狗
{
[virtual] void Run()
{
// 狗的跑。
}
}... Other animals// 当你出门旅行去,你必定会遇到动物。所以我们需要定义一个动物的变量Animal* SomeAnimal;//1. 当你看到 Cock 的时候:
SomeAnimal = new Cock();// 当你把鸡给赶跑了的时候, 鸡跑的动作发生了:
SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“鸡的跑”//2. 当你看到 Dog 的时候:
SomeAnimal = new Dog();// 当你把Dog给赶跑了的时候, Dog跑的动作发生了:
SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“Dog的跑”//3. 当你遇到流氓的时候:
SomeAnimal = new Gangster();// 当你把流氓给赶跑了的时候, 流氓跑的动作发生了:
SomeAnimal.Run(); // 注意,这就是多态发生的地方,它是调用的“流氓的跑”...
...从上面你都可以看到,我们通过调用基类的虚函数,就达到了我们想要的效果——去根据具体情况做不同的事。
这就是多态,它就是通过虚函数来实现的。现在,你应该对虚函数有概念了吧。
调用子类的方法 父类a aa=new 子类();