关于C#重写,隐藏的一些事

时间:2023-12-25 00:06:13

第一次开始写技术博客,不知该从何处下手,本人算是菜鸟一枚,每每看到博客园里面的大牛们分享的技术文章,只能望其项背,高不可攀。但细细想来,若不尝试着从小处从低处慢慢去积累分享,想要成为技术大牛也只能沦为泡影。所以,just do it。

c#面试过程中重写(override),隐藏(new)之间的区别算是经常被问到,下面将举个栗子来演示一下。

1、新建一个Person类,里面有个Say()方法,用virtual修饰可被子类重写或隐藏。

关于C#重写,隐藏的一些事

2、再建一个Teacher类继承于Person类,重写(override)Say()方法。

关于C#重写,隐藏的一些事

3、再建一个Student类继承于Person类,隐藏(new)Say()方法。

关于C#重写,隐藏的一些事

4、我们在Main方法中进行调用

关于C#重写,隐藏的一些事

执行结果如下:

关于C#重写,隐藏的一些事

分析:

1、实例化一个Person对象person,第一次调用Say()时,调用的是自身的say(),输出: I am a Person;

2、实例化一个Teacher对象teacher,由于Teacher类重写(override)父类Person中的Say()方法,执行的是重写之后的Say(),所以输出:I am a teacher;

3、实例化一个Student对象student,执行的后输出:I am a student;

4、当person指向一个Teacher实例时,编译时person调用Say()实则运行时调用的是重写之后的Say();

而当person指向一个Student实例时,编译时person调用Say(),运行时调用的是自身的Say();说明Student中的Say()是一个全新的方法,对Person对象隐藏,Person对象只能访问自己的Say()。

总结:

1、子类通过New关键字修饰的方法将对分类隐藏,是子类一个全新的方法,父类将不能调用;

2、子类重写父类中的方法,子类和父类调用的都将是子类override修饰的方法。