zoukankan      html  css  js  c++  java
  • C#中virtual 与 override

    C#中virtual 与 override

    在C#中,如果你在声明一个方法的时候用了virtual这个关键字,那么,在派生类中,你就可以使用override或者new关键字来弃用它或是忽略它.如果你在父类中用了virtual这个关键字,而在其派生类中又没有用override或new关键字,而直接引用一个同名方法的话,编译器将会报错,并将以new方式,即忽略派生类中的方法的方式来运行.下面的例子可以帮助你来理解:


    000: // Versioning\versioning.cs
    001: public class MyBase 
    002: {
    003: public virtual string Meth1() 
    004: {
    005: return "MyBase-Meth1";
    006: }
    007: public virtual string Meth2() 
    008: {
    009: return "MyBase-Meth2";
    010: }
    011: public virtual string Meth3() 
    012: {
    013: return "MyBase-Meth3";
    014: }
    015: }
    016: 
    017: class MyDerived : MyBase 
    018: {
    019: public override string Meth1() 
    020: {
    021: return "MyDerived-Meth1";
    022: }
    023: public new string Meth2() 
    024: {
    025: return "MyDerived-Meth2";
    026: }
    027: public string Meth3() // 系统在这里将会有一个警告,并且将会隐藏方法Meth3() 
    028: 
    029: 
    030: {
    031: return "MyDerived-Meth3";
    032: }
    033: 
    034: public static void Main() 
    035: {
    036: MyDerived mD = new MyDerived();
    037: MyBase mB = (MyBase) mD;
    038: 
    039: System.Console.WriteLine(mB.Meth1());
    040: System.Console.WriteLine(mB.Meth2());
    041: System.Console.WriteLine(mB.Meth3());
    042: }
    043: }

    输出:

    MyDerived-Meth1
    MyBase-Meth2
    MyBase-Meth3


    可以很明显地看出来,后两个new关键字的输出是父类中的方法的输出,所以可以看出,new这个关键字的作用是如果在以前的版本中有这个方法,就沿用以前的方法,而不用我现在方法内容.而virtual的方法的作用正好相反,它的作用是如果在父类中有这样一个方法,则用我现在写的方法内容,让以前的滚蛋!

    如果你把第037行去掉,把039-041中的mB全部改为mD,输出又变为:

    MyDerived-Meth1
    MyDerived-Meth2
    MyDerived-Meth3

    这又说明了什么呢,明了派生类的对象只有在被父类重塑的时候,override和new关键字才会生效.呵呵,这样说的确有点难以理解,大家只有自己动手,才能搞清楚这其中的机关,所谓"实践是检验C#的唯一标准",哈哈!


       本人博客的文章大部分来自网络转载,因为时间的关系,没有写明转载出处和作者。所以在些郑重的说明:文章只限交流,版权归作者。谢谢

  • 相关阅读:
    Robberies HDU 2955
    P1474 货币系统 Money Systems(完全背包)(大水题)
    P1802 5倍经验日(01背包问题,水题)
    1621 花钱买车牌 (暴力一下就非常皮了)
    统计硬币 HDU 2566 (三种解法:线性代数解法,背包解法,奇思妙想解法 >_< )
    P1754 球迷购票问题
    Duwamish模式的Remoting注意事项(Remoting高手可以不必看了)
    Visual source safe 每日备份
    python第一篇
    pycharm的安装和使用
  • 原文地址:https://www.cnblogs.com/wzg0319/p/1340756.html
Copyright © 2011-2022 走看看