new、override关键字

1.如果我想彻底覆盖父类的方法,此时可以使用override

.假有classB继承自classA,代码如下:

    public class B : A
    {
        public bool _flag;
        public B(bool flag)
        {
            _flag = flag;
        }
        protected override void Write()
        {
            Console.Write("Class B");
        }
        public override void SayHello()
        {
            if (_flag)
            {
                base.SayHello();
            }
            else
            {
                this.Write();
            }
        }
    }
    public class A
    {
        protected virtual void Write()
        {
            Console.Write("Class A");
        }
        public virtual void SayHello()
        {
            this.Write();
        }
    }

这个时候实例化classB,打印输出:

static void Main(string[] args)
{
    B b = new B(false);
    //B b = new B(true);
    b.SayHello();
    Console.ReadKey();
}

此时无论传入的flag值是true还是false执行的都是classA的Write()方法。这说明override会覆盖父类的同名方法,相当于被替代了。

2.如果我不想覆盖父类的方法,他们井水不犯河水,可以使用new关键字,显式影藏父类的方法。代码如下

new protected void Write()
{
    Console.Write("Class B");
}

这个时候当flag为true执行的是classA的write()方法;flag为false执行的是classB的方法。

时间: 2024-10-14 01:16:06

new、override关键字的相关文章

C++11 之 override 关键字

1  公有继承 当派生类公有继承自 (public inheritance) 基类时,继承包含两部分:一是函数的"接口" (interface),二是函数的"实现" (implementation) 基类 Shape 中有三个不同形式的成员函数,分别代表公有继承的三种情况 class Shape { public: virtual void draw() const = 0; virtual void error(const std::string& msg

C++ 中提供的override 关键字

C++ 语言标准这些年进化的很快,许多新引入的特性我都没有用过.说实话自己也比较懒,总是觉得自己对C++ 的掌握程度已经足够应付日常的各种项目了,所以没有学习新特性的动力.而且一直觉得新引入的特性多数都属于那种"语法糖",能够发挥的作用不大,其实是可有可无的. 不过最近编写一个小程序时代码里有个小bug,困扰了我好几天.最后在几个热心网友的帮助下才解决了.这个小bug让我认识到C++11 中提供的override 关键字非常有用,下面就简单的说说我代码中的那个小bug. 我的那个代码是

override关键字

https://www.cnblogs.com/xinxue/p/5471708.html 2  重写 (override) 在 1.2.2 中提到 override 关键字,可以避免派生类中忘记重写虚函数的错误 下面以重写虚函数时,容易犯的四个错误为例,详细阐述之 class Base { public: virtual void mf1() const; virtual void mf2(int x); virtual void mf3() &; void mf4() const; // i

c++ override 关键字

描述:override保留字表示当前函数重写了基类的虚函数. 目的:1.在函数比较多的情况下可以提示读者某个函数重写了基类虚函数(表示这个虚函数是从基类继承,不是派生类自己定义的):2.强制编译器检查某个函数是否重写基类虚函数,如果没有则报错. 用法:在类的成员函数参数列表后面添加该关键字既可. 例子:class Base {virtual void f();}: class Derived : public Base {void f() override; // 表示派生类重写基类虚函数fvo

使用 Override 和 New 关键字进行版本控制

C# 语言经过专门设计,以便不同库中的基类与派生类之间的版本控制可以不断向前发展,同时保持向后兼容. 这具有多方面的意义.例如,这意味着在基类中引入与派生类中的某个成员具有相同名称的新成员在 C# 中是完全支持的,不会导致意外行为. 它还意味着类必须显式声明某方法是要重写一个继承方法,还是一个隐藏具有类似名称的继承方法的新方法. 在 C# 中,派生类可以包含与基类方法同名的方法.基类方法必须定义为 virtual.如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警

C#中的override和new关键字

问题1: 虚方法 首先,看下面的代码. namespace CSharpTest { class A { public void fun() { Console.WriteLine("这是父类方法"); } } class B : A { public void fun() { Console.WriteLine("这是子类方法"); } } class Test { public static void Main() { A a = new A(); a.fun(

浅谈C#中new、override、virtual关键字的区别

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的学习了下在设计模式中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来. 一.New 在C#中,new这个关键字使用频率非常高,主要有3个功能: a)   作为运算符用来创建一个对象和调用构造函数. b)   作为修饰符. c)   用于在泛型声明中约束可能用作类型参数的参数的类型. 在本文中,只具体介绍new作为修饰符的作用,在用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说

浅析C#中new、override、virtual关键字的区别

OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的复习了下在C#中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来,方便大家查阅. 一.在C#中,new这个关键字使用频率非常高,主要有3个功能: a)     作为运算符用来创建一个对象和调用构造函数. b)     作为修饰符. c)      用于在泛型声明中约束可能用作类型参数的参数的类型. 在本文中,只具体介绍new作为修饰符的作用,在用作修饰符时,new关键字可以在派生类中隐藏基

Scala Study --- override

以前没使用过Scala, 其实我Java也是半截水平\无奈, 学Java的时候刚从C++中挣脱出来,发现Java无比优雅,但很快又对Java种种不信任程序员的设计感到受限. 直到, , 今天遇到了Scala\撒花 Scala的collection设计不能更赞!一段时间后打算专门写篇文章总结Scala,名字就叫"我为什么喜欢Scala!". 废话就不多说了,今天研究了一下Scala的override用法与特点. override --- one of the key words of S