• 关于C#重写,隐藏的一些事


    第一次开始写技术博客,不知该从何处下手,本人算是菜鸟一枚,每每看到博客园里面的大牛们分享的技术文章,只能望其项背,高不可攀。但细细想来,若不尝试着从小处从低处慢慢去积累分享,想要成为技术大牛也只能沦为泡影。所以,just do it。

    c#面试过程中重写(override),隐藏(new)之间的区别算是经常被问到,下面将举个栗子来演示一下。

     1、新建一个Person类,里面有个Say()方法,用virtual修饰可被子类重写或隐藏。

    2、再建一个Teacher类继承于Person类,重写(override)Say()方法。

    3、再建一个Student类继承于Person类,隐藏(new)Say()方法。

         

    4、我们在Main方法中进行调用

    执行结果如下:

               

    分析:

          1、实例化一个Person对象person,第一次调用Say()时,调用的是自身的say(),输出: I am a Person;

          2、实例化一个Teacher对象teacher,由于Teacher类重写(override)父类Person中的Say()方法,执行的是重写之后的Say(),所以输出:I am a teacher;

          3、实例化一个Student对象student,执行的后输出:I am a student;

          4、当person指向一个Teacher实例时,编译时person调用Say()实则运行时调用的是重写之后的Say();

               而当person指向一个Student实例时,编译时person调用Say(),运行时调用的是自身的Say();说明Student中的Say()是一个全新的方法,对Person对象隐藏,Person对象只能访问自己的Say()。

    总结:

          1、子类通过New关键字修饰的方法将对分类隐藏,是子类一个全新的方法,父类将不能调用;

          2、子类重写父类中的方法,子类和父类调用的都将是子类override修饰的方法。

     

  • 相关阅读:
    Part 1R 函数、极限和连续
    Part 1 函数、极限与连续
    C++继承与派生
    VUE笔记
    VUE错误记录
    VUE笔记
    VUE笔记
    VUE笔记
    JS学习笔记
    Node.js笔记 请求方式 GET
  • 原文地址:https://www.cnblogs.com/ccnu0641/p/5259695.html
Copyright © 2020-2023  润新知