看到自己以前的一篇博客,感觉还差点什么,√,代码...

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相关推荐

  1. [C#基础知识系列]专题十七:深入理解动态类型

    本专题概要: 动态类型介绍 为什么需要动态类型 动态类型的使用 动态类型背后的故事 动态类型的约束 实现动态行为 总结 引言: 终于迎来了我们C# 4中特性了,C# 4主要有两方面的改善--Com 互 ...

  2. c# string 占位符_C# 基础知识系列- 9 字符串的更多用法(一)

    0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...

  3. 线程基础知识系列(三)线程的同步

    本文是系列的第三篇,前面2篇,主要是针对单个线程如何管理,启动等,没有过多涉及多个线程是如何协同工作的. 线程基础知识系列(二)线程的管理 :线程的状态,控制,休眠,Interrupt,yield等 ...

  4. android 集成同一interface不同泛型_C# 基础知识系列- 10 反射和泛型(二)

    0. 前言 这篇文章延续<C# 基础知识系列- 5 反射和泛型>,继续介绍C#在反射所开发的功能和做的努力.上一篇文章大概介绍了一下泛型和反射的一些基本内容,主要是通过获取对象的类型,然后 ...

  5. JavaScript基础知识系列:面向对象的编程

    JavaScript Basics is a series that explore some core concepts that every frontend software engineer ...

  6. c# getresponsestream返回byte[]_C# 基础知识系列-13 常见类库(三)

    0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...

  7. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    [WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...

  8. c#物联网_C# 基础知识系列- 16 开发工具篇

    0. 前言 这是C# 基础知识系列的最后一个内容讲解篇,下一篇是基础知识-实战篇.这一篇主要讲解一下C#程序的结构和主要编程工具. 1. 工具 工欲善其事必先利其器,在实际动手之前我们先来看看想要编写 ...

  9. c# 找出目录下的所有子目录_C# 基础知识系列- 14 IO篇 文件的操作(2)

    前接上一篇内容. 如果是第一次捧场的小伙伴,为了您阅读的连贯性,烦请扫一眼<C# 基础知识系列- 14 IO篇 文件的操作(1)>.本篇是IO之文件操作的第二篇,介绍一下目录和路径的相关类 ...

最新文章

  1. 快速提升性能的SQL语句,建议收藏
  2. 塔勒布: 2019-nCoV的系统风险:一份笔记
  3. 什么样的网页百度爱收录?
  4. python计算警告:overflow encountered in exp(指数函数溢出)(sigmoid函数的numpy数组计算方式)
  5. sparkSQL 统计TopN
  6. SuperSocket源码解析之开篇
  7. 阿里发布的规约插件,细节都在这里
  8. 物理层数据通信理论基础
  9. WebApi系列~HttpClient的性能隐患(转)
  10. ASP.net在页面所有内容生成后、输出内容前对页面内容进行操作
  11. ubuntu和ok6410开发板之间架设nfs
  12. 计算机游戏41,Win7玩游戏提示“无法启动此程序,计算机中丢失d3dx9-41.dll”怎么办...
  13. 【C语言】 分享几个简单的代码
  14. LPC1788 UART-DMA遇到的问题
  15. fps透视基础-3分钟快速定位矩阵基址-附3D坐标转屏幕坐标算法
  16. 计算机应用基础2011,2011统计师计算机应用基础:计算机概述
  17. 汉诺塔问题及最长数组子串问题源码
  18. java模拟HTTP请求(集合了网上搜来的各种)
  19. Chapter7.1:频域分析法理论基础
  20. 初阶后的C++ 第七节 —— 多态

热门文章

  1. android get width单位是什么意思,浅析Android中getWidth()和getMeasuredWidth()的区别
  2. java快速注释怎么配置_详解如何在低版本的Spring中快速实现类似自动配置的功能...
  3. 华为鸿蒙生态最新消息,魅族加入华为鸿蒙生态?大家先别高兴,此鸿蒙非彼鸿蒙...
  4. redis高级用法:geo位置相关信息
  5. flask异步操作_从Flask到FastAPI的平滑迁移
  6. 计算机教师职称申报工作总结,个人评定一级教师工作总结
  7. 生成html_用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告
  8. neo4j 节点与关系
  9. Spring mvc @PathVaribale
  10. python __xxxitem__