c#隐藏方法(new)和方法重写(override)
重载、重写和隐藏的定义:
重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个。而返回值类型不同是不能构成重载的。
重写:继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的
例如:基类方法声明为virtual(虚方法),派生类中使用override
申明此方法的重写.
隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new
声明此方法的隐藏。
重载时,根据参数选择调用的方法;
重写时,访问父类子类皆调用子类的重写方法;
隐藏时,访问父类则调用父类的方法,子类子类的方法。
隐藏(new)示例:
using System;
class A
{
public void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
new public void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main(string[] args)
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
输出为
B.F
A.F
重写virtual(虚方法)示例
using System;
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main()
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
输出为
B.F
B.F
补充:重写override一般用于接口实现和继承类的方法改写,要注意
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
分享到:
相关推荐
在C#编程语言中,`override`、`new` 和 `base` 是三个关键字,它们在处理类继承和方法重写时起着至关重要的作用。理解这三个关键字的关系和用法对于编写可扩展和灵活的代码至关重要。 首先,我们来看 `override` ...
在C#中,我们可以使用`override`关键字来重写基类的虚方法,使用`new`关键字来隐藏基类的方法。 1. **重写(Override)**: - 重写是指子类重新定义基类中的虚方法,以便提供自己的实现。在C#中,只有标记为`virtual...
在C#中,为了能够重写一个方法,基类中的方法必须声明为`virtual`或`abstract`,而子类中相应的方法则需使用`override`关键字。例如: ```csharp public class BaseClass { public virtual void MyMethod() { ...
在C#中,我们使用`override`关键字来标记需要重写的方法。对于按钮控件,我们需要关注的是`OnClick`事件处理程序,这是按钮被点击时调用的方法。 1. **基础步骤**:首先,我们需要创建一个继承自`System.Windows....
在C#编程语言中,`new` 和 `override` 关键字被用于实现多态性。多态性是面向对象编程的一个重要特性,它允许子类继承父类的方法并根据自己的需求进行修改或扩展。然而,`new` 和 `override` 在使用时有着本质的区别...
在C#编程语言中,`new`和`override`关键字都是用来处理方法重写和隐藏的,但它们之间存在着显著的区别。这篇文章将深入探讨这两种方式在实现抽象类重写时的具体差异。 首先,我们来看一下抽象类的实现。在C#中,...
在C#编程语言中,`new`和`override`关键字在继承关系中扮演着不同的角色,它们用于处理派生类与基类之间的方法和属性。理解这两者的区别至关重要,因为它们直接影响代码的行为。 首先,我们来看看`new`关键字。`new...
在编程语言中,尤其是面向对象的语言如C#,`new`和`override`是两个非常重要的关键字,它们在处理类的继承和多态性时起到关键作用。理解这两个关键字的区别对于编写灵活、可扩展的代码至关重要。 首先,我们来看`...
为了响应鼠标悬停事件,还需要对`XPButton`类进行进一步扩展,即重写`OnMouseEnter`和`OnMouseLeave`方法。这两个方法分别在鼠标进入和离开按钮时被调用,可以通过它们改变`mouseover`变量的状态。 ```csharp ...
2:方法隐藏:无论基类中的方法是否用了virtual关键字,继承类中都可以用new关键字(如果不用new的话,不会产生错误,但会生成一个编译警告)将基类中的方法隐藏,所谓隐藏就是隐藏,不像重写,重写就是原来的(基类...
在C#编程语言中,子类继承父类是一种常见的面向对象特性,它允许子类获取父类的属性和方法,并可以扩展或修改这些特性。本文将深入探讨C#中子类如何重写父类的方法,以及这种方法在实际编程中的应用。 ### 1. 继承...
在编程语言如C#中,`new`和`override`关键字用于处理类的继承和方法重写,这两种机制涉及到内存管理和多态性。本文将详细解释这两种重写方法的内存机制,并通过实例来阐述它们的区别。 首先,让我们回顾一下继承...
在C#编程语言中,`new`和`override`关键字都是用来处理方法重写和隐藏的,但它们的行为和用途有所不同。以下是对这两个关键字详细解释的个人总结。 首先,`override`关键字用于重写基类中的虚方法(virtual methods...
### C#中的重载(Overload)与重写(Override) #### 1. 重载(Overload) 重载是在同一个类中定义多个同名但参数列表不同的方法。这里的参数列表的不同可以体现在参数的数量上,也可以体现在参数的类型上。 **示例代码...
总结来说,`new` 关键字用于隐藏基类方法,`override` 关键字用于重写基类的虚方法,而 `virtual` 关键字则用于声明一个方法可以被派生类重写。理解和熟练运用这三个关键字是编写高效、灵活的 C# 代码的基础。
在C#编程语言中,Override和New关键字是用于处理继承关系中方法和属性重定义的重要概念,它们在处理多态性方面起到关键作用。这里我们将深入探讨这两种关键字的用法和区别。 首先,Override关键字用于明确表示派生...
然而,如果`D`类也继承自`A`,但是使用`new`关键字来覆盖`Func()`,而不是`override`,则不会重写虚方法,而是创建了一个新的同名方法: ```csharp public class D : A { public new void Func() { Console....
在C#编程语言中,虚方法是面向对象编程的一个核心概念,它允许子类重写父类的行为。本文将深入探讨虚方法的概念、用途以及如何在C#中使用它们,特别针对面向对象编程的初学者。 一、虚方法介绍 虚方法是C#中的一种...
3. 抽象类可以包含抽象属性和方法,但一旦包含了抽象方法,就必须将类声明为抽象类。 ```csharp public abstract class A { public abstract int Num { get; set; } public abstract void E(); } ``` 4. 具体派生...
在C#编程语言中,`new`、`override`和`virtual`是三个非常重要的关键字,它们用于控制类成员(主要是方法)的行为,涉及到多态性这一核心概念。接下来我们将详细探讨这三个关键字以及它们在实际编程中的应用。 1. `...