基础知识系列☞关键字→virtual
看到自己以前的一篇博客,感觉还差点什么,√,代码...
using System; namespace Test
{
public class Program
{
private static void Main(string[] args)
{
//调用...
Dog dog = new Dog();
dog.VirtualMethod();
dog.NoVirtualMethod();
Console.Read();
}
} #region 测试代码
/// <summary>
/// 基类:动物
/// </summary>
public class Animals
{
public virtual void VirtualMethod()
{
Console.WriteLine("父类→标记'virtual'的方法→VirtualMethod");
}
public void NoVirtualMethod()
{
Console.WriteLine("父类→未标记'virtual'的方法→NoVirtualMethod");
}
}
/// <summary>
/// 子类:汪星人
/// </summary>
public class Dog : Animals
{
public override void VirtualMethod()
{
Console.WriteLine("子类→重写方法→VirtualMethod");
}
/*
/// <summary>
/// 错误 CS0506 “Dog.NoVirtualMethod()”: 继承成员“Animals.NoVirtualMethod()”未标记为 virtual、abstract 或 override,无法进行重写
/// </summary>
public override void NoVirtualMethod()
{
Console.WriteLine("子类→重写方法→NoVirtualMethod");
base.NoVirtualMethod();
}
*/
/// <summary>
/// 警告 CS0108 “Dog.NoVirtualMethod()”隐藏继承的成员“Animals.NoVirtualMethod()”。如果是有意隐藏,请使用关键字 new。
/// </summary>
public void NoVirtualMethod()
{
base.NoVirtualMethod();//base访问父类...扩展一下...
Console.WriteLine("子类→未重写方法→NoVirtualMethod");
}
//new public void NoVirtualMethod()
//{
// Console.WriteLine("子类→new方法→NoVirtualMethod");
//}
}
#endregion }
上面代码结果:
由此可以看出↓
当基类[Animals]的方法[NoVirtualMethod]未标记为[virtual]的时候,
子类[Dog]中是没有办法[override]重写的...
提示:“Dog.NoVirtualMethod()”: 继承成员“Animals.NoVirtualMethod()”未标记为 virtual、abstract 或 override,无法进行重写
从智能提示中也可以看出来↓,没有提示[NoVirtualMethod]可以进行重写...
如上面代码那样[强行](已经出现警告了)在子类中写一个和父类同名的方法,调用的时候还是会显示使用子类的方法...
我理解的就是:子类和父类中的方法同名了,子类隐藏了父类的方法,推荐写法就是使用new
new public void NoVirtualMethod()
{
Console.WriteLine("子类→new方法→NoVirtualMethod");
}
xxx
基础知识系列☞关键字→virtual的更多相关文章
- 基础知识系列☞Abstract和Virtual→及相关知识
转载地址→http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html 在C#的学习中,容易混淆virtual方法和abstract方法的 ...
- C# 基础知识系列- 9 字符串的更多用法(一)
0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...
- C# 基础知识系列- 10 反射和泛型(二)
0. 前言 这篇文章延续<C# 基础知识系列- 5 反射和泛型>,继续介绍C#在反射所开发的功能和做的努力.上一篇文章大概介绍了一下泛型和反射的一些基本内容,主要是通过获取对象的类型,然后 ...
- C# 基础知识系列- 14 IO篇 文件的操作 (3)
本篇继续前两篇内容,跟大家介绍一下Path类以及FileSystemInfo这个类的主要方法和属性. 上文提到,在<C# 基础知识系列-IO篇>之文件相关的内容完结之后,会带领大家开发一个 ...
- 基础知识系列☞C#中→属性和字段的区别
"好吧...准备写个'基础知识系列',算是记录下吧,时时看看,更加加深记忆···" 其实本来准备叫"面试系列"... 字段.属性.你先知道的哪个概念? ***我 ...
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- 学习javascript基础知识系列第三节 - ()()用法
总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...
- C# 基础知识系列- 3 集合数组
简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...
- C# 基础知识系列- 12 任务和多线程
0. 前言 照例一份前言,在介绍任务和多线程之前,先介绍一下异步和同步的概念.我们之间介绍的知识点都是在同步执行,所谓的同步就是一行代码一行代码的执行,就像是我们日常乘坐地铁通过安检通道一样,想象我们 ...
随机推荐
- Chrome禁止http自动转为https
解决方法 在Chrome浏览器地址栏输入chrome://net-internals/#hsts 在Delete domain security policies 中输入要删除自动转换的域名 原因 将 ...
- 使用 LaTeX 画图系列
可以使用TikZ,用TikZ绘制出来的图形效果非常好,原生支持所有LaTeX语法. 使用 LaTeX 画柱状图/条形图参考:Guide to draw charts (basic, pie, bar) ...
- Effective Java 第三版——52. 明智而审慎地使用重载
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- 基础007_FIFO原理
作者:桂. 时间:2018-05-13 05:51:13 链接:http://www.cnblogs.com/xingshansi/p/9030879.html 前言 主要梳理FIFO的特性,fif ...
- Centos下Yum安装PHP 5.5、5.6、7.0
Centos系统自带的php版本很低,如果我们需要使用高版本的php,可以不用编译安装,直接用yum安装会非常省时省力. 1.检查当前安装的PHP包yum list installed | grep ...
- JS模块化:CommonJS和AMD(Require.js)
早期的JS中,是没有模块化的概念的,这一情况直到09年的Node.js横空出世时有了好转,Node.js将JS作为服务端的编程语言,使得JS不得不寻求模块化的解决方案. 模块化概念 在JS中的模块是针 ...
- 【Spark深入学习 -10】基于spark构建企业级流处理系统
----本节内容------- 1.流式处理系统背景 1.1 技术背景 1.2 Spark技术很火 2.流式处理技术介绍 2.1流式处理技术概念 2.2流式处理应用场景 2.3流式处理系统分类 3.流 ...
- java解析Excel(xls、xlsx两种格式)
https://www.cnblogs.com/hhhshct/p/7255915.html ***************************************************** ...
- 快播王欣发布匿名IM社交软件“马桶MT”
2019年1月14日,快播王欣推出了一款匿名IM社交软件——马桶MT,它的灵感像是来自于美国的匿名分享应用Secret(已关闭). 原快播创始人王欣近日在微博预告了其新公司云歌人工智能推出一款全新社交 ...
- Java反射,参数为数组
使用反射调用非公开的方法有时能解决许多问题,如果方法的参数是数组时类型该怎么传递呢?这里找到了一种方法记录一下 实例 比如: class A{ private void sayHello(String ...