• 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

  • 相关阅读:
    洛谷 P5110 块速递推
    洛谷 P3868 [TJOI2009]猜数字
    Codeforces 343D Water Tree
    Codeforces 915E Physical Education Lessons
    洛谷 P2787 语文1(chin1)- 理理思维
    洛谷 P4344 [SHOI2015]脑洞治疗仪
    洛谷 P3338 [ZJOI2014]力
    【模板】珂朵莉树(ODT)(Codeforces 896C Willem, Chtholly and Seniorious)
    【模板】FFT
    Solution of CF911G Mass Change Queries
  • 原文地址:https://www.cnblogs.com/Lulus/p/12743384.html
Copyright © 2020-2023  润新知