• C#中重写、重载和隐藏的概念


    重写override

    用 override 关键字重新实现基类中的虚方法virtual
    在运行的过程中,无论通过哪个类型的引用,真正对象类型的方法将被调用

    隐藏

    隐藏是指用 new关键字重新实现基类中的方法
    在运行的过程中通过引用的类型判断应该调用哪个类型的方法

    父类Parent

    public class Parent
    {
    
    	public void NewMethod()
    	{
    		Console.WriteLine($"{nameof(Parent)}.{nameof(NewMethod)}");
    	}
    
    	public virtual void VirtualMethod()
    	{
    		Console.WriteLine($"{nameof(Parent)}.{nameof(VirtualMethod)}");
    	}
    
    	private void PrivateMethod()
    	{
    		//不可被子类访问
    	}
    }
    

    子类Child

    public class Child: Parent
    {
    	/// <summary>
    	/// 重写虚方法
    	/// </summary>
    	public override void VirtualMethod()
    	{
    		base.VirtualMethod();
    		Console.WriteLine($"{nameof(Child)}.{nameof(VirtualMethod)}");
    	}
    
    	/// <summary>
    	/// 隐藏、new关键词重新实现
    	/// </summary>
    	public new void NewMethod()
    	{
    		//base.NewMethod();
    		Console.WriteLine($"{nameof(Child)}.{nameof(NewMethod)}");
    	}
    }
    

    重载

    重载是指多个方法共享同一个名字并且拥有相同的返回值,但是却可以拥有不同的参数列表

    public void OverloadMethod()
    {
    	Console.WriteLine($"This is OverloadMethod");
    }
    
    public void OverloadMethod(string input)
    {
    	Console.WriteLine($"This is OverloadMethod:{input}");
    }
    
    public void OverloadMethod(int input)
    {
    	Console.WriteLine($"This is OverloadMethod:{input}");
    }
    
    public void OverloadMethod(bool input)
    {
    	Console.WriteLine($"This is OverloadMethod:{input}");
    }
    
    

    示例代码

    OverrideNewAndVirtual

  • 相关阅读:
    游览器保存密码和自动填充密码的困惑 (browser save password and auto fill password )
    SQL basic
    ui router digest 10 time
    HttpCookie
    web api 2 学习笔记 (OData Batch request)
    $provide.decorator
    Entity Framewor 学习笔记 (碎碎的东西)
    生活类App原型制作分享-AnyList
    2019年网页设计趋势前瞻,先睹为快!
    Mockplus3.5.0.1新增标注功能
  • 原文地址:https://www.cnblogs.com/Lulus/p/12743384.html
Copyright © 2020-2023  润新知