zoukankan      html  css  js  c++  java
  • C#基础知识学习(1)方法的重写和隐藏

    做了1年多了C#,发现些项目过程中很多基础东西都不是很清晰,基础不够牢固。现在开始复习基础知识并做重点记录

    方法需要被重写的时候,可以在方法前加入virtual使方法变成虚方法。

    这样我们可以重新写个方法对虚方法进行重写需要加上override。
    注意:成员字段和静态函数都不能声明为virtual,因为这个概念支队类中的实例函数成员有意义。
     
    1. 重写override:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
    在重写方法中,有个特殊方法,base.<MethodName>(),这里的MethodName是父类的方法名。
    class MyAlass:Base2
    {
    public override void ClassB()
    {
    base.ClassB();
    Console.WriteLine("a.ClassB()");
    }
    }
    直接在子类重写方法中加载父类方法。
    结果是
     
    2.隐藏 : 基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
     自己的理解:
    向下转型继承,子类new覆盖父类的方法,在调用方法的时候,显示和调用的是父类的方法而不是子类的方法。
    子类override重载父类方法,在调用方法的时候,调用的是子类的方法。相当于删除了父类的方法
         说白了:new是覆盖,override是重载,“覆盖”并不意味着“删除”,但“重载”意味着“删除”,这就是“覆盖”和“重载”的区别  
    例子:
    //基类1 
    class Base
    {
    public void ClassA()
    {
    Console.WriteLine("Base.ClassA()");
    }
    }
    //子类覆盖基类方法
    class MyClass:Base
    {
    public new void ClassA()
    {
    Console.WriteLine("c.ClassA()");
    }
    }
     
    //基类2
    class Base2
    {
    public virtual void ClassB()
    {
    Console.WriteLine("Base2.ClassB()");
    }
    }
    //子类重写基类2的方法
    class MyAlass:Base2
    {
    public override void ClassB()
    {
    Console.WriteLine("a.ClassB()");
    }
    }
    //主程序
    class Program
    {
    static void Main(string[] args)
    {
    Base b1 = new Base();
    b1.ClassA();
    Base c = new MyClass();
    c.ClassA();
    Console.WriteLine(" ");
    Base2 b2 = new Base2();
    b2.ClassB();
    Base2 a = new MyAlass();
    a.ClassB();
     
    Console.ReadKey();
    }
    }
     
    运行结果:

  • 相关阅读:
    Mysql练习#1-建表
    Mysql学习笔记#7-范式
    Git学习笔记#9-标签
    Git学习笔记#8-操作冲突
    Git学习笔记#7-分支操作
    Git学习笔记#6-远程仓库(GitHub)
    Git学习笔记#5-文件删除
    Git学习笔记#4-版本回退
    Git学习笔记#3-修改文件与撤销
    免费分享老男孩全栈9期视频,共126天
  • 原文地址:https://www.cnblogs.com/myhomebo/p/5465712.html
Copyright © 2011-2022 走看看