做了1年多了C#,发现些项目过程中很多基础东西都不是很清晰,基础不够牢固。现在开始复习基础知识并做重点记录

方法需要被重写的时候,可以在方法前加入virtual使方法变成虚方法。

这样我们可以重新写个方法对虚方法进行重写需要加上override。
注意:成员字段和静态函数都不能声明为virtual,因为这个概念支队类中的实例函数成员有意义。
 
1. 重写override:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
在重写方法中,有个特殊方法,base.<MethodName>(),这里的MethodName是父类的方法名。
class MyAlass:Base2
{
public override void ClassB()
{
base.ClassB();
Console.WriteLine("a.ClassB()");
}
}
直接在子类重写方法中加载父类方法。
结果是
 
2.隐藏 : 基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
 自己的理解:
向下转型继承,子类new覆盖父类的方法,在调用方法的时候,显示和调用的是父类的方法而不是子类的方法。
子类override重载父类方法,在调用方法的时候,调用的是子类的方法。相当于删除了父类的方法
     说白了:new是覆盖,override是重载,“覆盖”并不意味着“删除”,但“重载”意味着“删除”,这就是“覆盖”和“重载”的区别  
例子:
//基类1 
class Base
{
public void ClassA()
{
Console.WriteLine("Base.ClassA()");
}
}
//子类覆盖基类方法
class MyClass:Base
{
public new void ClassA()
{
Console.WriteLine("c.ClassA()");
}
}
 
//基类2
class Base2
{
public virtual void ClassB()
{
Console.WriteLine("Base2.ClassB()");
}
}
//子类重写基类2的方法
class MyAlass:Base2
{
public override void ClassB()
{
Console.WriteLine("a.ClassB()");
}
}
//主程序
class Program
{
static void Main(string[] args)
{
Base b1 = new Base();
b1.ClassA();
Base c = new MyClass();
c.ClassA();
Console.WriteLine("\n");
Base2 b2 = new Base2();
b2.ClassB();
Base2 a = new MyAlass();
a.ClassB();
 
Console.ReadKey();
}
}
 
运行结果:

C#基础知识学习(1)方法的重写和隐藏的更多相关文章

  1. GCC基础知识学习

    GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...

  2. (转)Linux基础知识学习

    Linux基础知识学习 原文:http://blog.csdn.net/ye_wei_yang/article/details/52777499 一.Linux的磁盘分区及目录 Linux的配置是通过 ...

  3. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

  4. Vue2基础知识学习

    Vue2基础知识学习 01.初识 new Vue({ el: '#root', //用于指定当前Vue实例为哪个容器服务,值通常为css选择器符 data () { return { } } }); ...

  5. AXAJ基础知识学习

    AXAJ基础知识学习 博客首页 Ajax简介 ajxa全称是Asynchronous Javascript And XML ,就是异步的JS 和XML 通过Ajax可以再浏览器中向服务器发送异步请求, ...

  6. 《Java基础知识》Java方法重载和重写

    重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...

  7. PHP基础知识学习总结

    从今天开始过一遍PHP的基础知识   加油  地址:http://www.runoob.com/php/php-mail.html   该看:PHP发送电子邮件 2017年5月23日23:38:30 ...

  8. Java基础知识学习(三)

    面向对象部分 首先要了解面向对象的思想,与C#一致,都是面向对象的语言 访问修饰符 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private ...

  9. 韩天峰博客 php基础知识学习记录

    http://rango.swoole.com 写好PHP代码真的不容易,给大家几个建议: 慎用全局变量,全局变量不好管理的,会导致你的代码依赖于全局变量,而耦合度太高. 一定不要复制粘贴代码,可重用 ...

随机推荐

  1. 关于爬虫的日常复习(17)——scrapy系列1

  2. mysql 自增

    auto_increment 在创建表的时候,可以设置id为自增 # 查看表现在的自增值 show create table blog \G; # 设置自增值的初始值 alter table blog ...

  3. C++ 引用分析

    引用 左值引用,建立既存对象的别名 右值引用,可用于为临时对象延长生命周期 转发引用,保持函数实参的类别 悬置引用,对象生命周期已经结束的引用,访问改引用为未定义行为 值类别,左值,纯右值,亡值 st ...

  4. HBase的安装、配置与实践

    本教程运行环境是在Ubuntu-64位系统下,HBase版本为hbase-1.1.2,这是目前已经发行的已经编译好的稳定的版本,带有src的文件是未编译的版本,这里我们只要下载bin版本hbase-1 ...

  5. 【java基础】String、StringBuilder和StringBuffer的区别

    关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.三者在执行速度方面的比较:StringBuilder >  String ...

  6. Ogre源码学习-Image和Texture

    以下文字来自源码注释: Image类:保存未压缩的图片数据,是唯一一个可以加载纹理的类.Image对象调用Codec对象来为图片数据解码. 通常,当在图片被加载前需要对它进行额外的处理,或者你想把它复 ...

  7. 基于 HTML5 WebGL 的虚拟现实可视化培训系统

    前言 2019 年 VR, AR, XR, 5G, 工业互联网等名词频繁出现在我们的视野中,信息的分享与虚实的结合已经成为大势所趋,5G 是新一代信息通信技术升级的重要方向,工业互联网是制造业转型升级 ...

  8. PYTHON经典算法-二叉树的后序遍历

    二叉树的后序遍历 问题描述 给出一个二叉树,返回其节点值的后序遍历 问题示例 给出一个二叉树{1,x,2,3}其中x表示空.后序遍历为[3,2,1] 这个图怎么画的呢?答案 需要注意的地方是:bina ...

  9. git上传本地代码到远程失败

    出现这种错误的原因是由于我不小心勾选了这个

  10. C++基类和派生类的析构函数

    1.派生类也不能继承基类的析构函数. 2.与构造函数不同的是,在派生类的析构函数中不用显式地调用基类的析构函数,因为每个类只有一个析构函数,编译器知道如何选择,无需程序员干涉. 3.构造函数和虚构函数 ...