A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 shangxin 于 2014-3-19 10:54 编辑

在c#中可以使用抽象函数重写基类中的虚函数吗?具体如何实现?



评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

5 个回复

倒序浏览
实测可行。建立三个依次继承的类:
父类:
  1.     class Parent
  2.     {
  3.         public virtual void print()
  4.         {
  5.             Console.WriteLine("父类!");
  6.         }
  7.     }
复制代码

子类:
  1.     abstract class Child : Parent
  2.     {
  3.          abstract public override void print();
  4.     }
复制代码

孙类:
  1.     class GrandChild : Child
  2.     {
  3.         public override void print()
  4.         {
  5.             Console.WriteLine("孙类!");
  6.         }
  7.     }
复制代码

子类使用抽象函数重写父类中的虚函数,孙类又重写子类中的抽象函数。
在Main函数中:
  1.         static void Main(string[] args)
  2.         {
  3.             Parent parent = new Parent();
  4.             GrandChild grandChild = new GrandChild();
  5.             parent.print();
  6.             grandChild.print();
  7.             Console.ReadKey();
  8.         }
复制代码

最终程序编译成功,运行正常,输出:
父类!
孙类!

证明实验成功。

技术有限,有不对的地方请批评指正。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报 1 0
开始我也是很晕,实际写了之后证明可以实现:
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Class1 cls1=new Class3();
  6.             cls1.func1();
  7.             Console.ReadKey();
  8.         }
  9.     }
  10.     class Class1
  11.     {
  12.         public virtual void func1()
  13.         {

  14.         }
  15.     }
  16.     abstract class Class2 : Class1
  17.     {
  18.         public abstract override void func1();
  19.     }
  20.     class Class3 : Class2
  21.     {
  22.         public override void func1()
  23.         {
  24.             Console.WriteLine("重写成功");
  25.         }
  26.     }
复制代码



评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
顶个,学习了~~
回复 使用道具 举报
抽象类不一定是基类,但抽象类一定是父类,只要最后一个子类不是抽象类其他都无所谓.
C#是单继承机制,你可以反过来想想,如果把子类做成可以继承他父类同时又可以继承父类的基类,那么说明没有完全继承.所以,C#的单继承机制一定会把被继承的类往上的所有财产全部都拿到手.
所以,子类当然会继承基类中的虚函数,使用不使用是另外一回事.
我认为抽象类的意义就在于强制他的子类必须使用抽象函数,向上没有影响.话说没有自己特有抽象函数的抽象类完全可以直接删掉,没有意义啊...

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报

请把问题设置为提问结束,这样可以给你加分。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马