关于在C#中对类中的隐藏基类方法和重写方法的理解
最近在学习C#,在C#中的类看到重写和隐藏基类的方法这些概念。才开始感觉自己不是很理解这些概念。也区分不开这些概念。通过自己的查找资料和练习后。慢慢的理解了类中的隐藏和重写这个概念。在C#中只有在基类定义了一些虚方法才能在派生类中重写基类中的虚方法。但是如果在派生类中使用隐藏方法,就不用在基类中定义虚方法。虚方法和重写实现的功能感觉是差不多的。都是在派生类中改变了基类中的方法,但是两者还是有质的区别,概念的性质也是不一样的。
重写是指:将基类中的方法替换掉,也就是抹掉基类中的原有方法,在派生类中重新写一种方法。当然重写的这个新方法也会作用到基类中。听着很抽象,但是看看代码就知道了。
代码如下:
using System;
namespace LHT
{
class a
{
public virtual void print()//虚方法,关键字为virtual
{
Console.WriteLine("这个是基类中的虚方法");
}
} class b : a
{
public override void print()//重写基类中的方法,关键字为override
{
Console.WriteLine("这个是派生类中的重写方法");
}
} class c
{
static void Main()
{
a temp1 = new a();
b temp = new b();
temp.print();
temp.print();
Console.ReadKey();
}
}
}
结果如下:
这个是派生类中的重写方法
这个是派生类中的重写方法
隐藏是指将基类中的方法忽略掉,再在派生类中写一个方法,这个方法只是在派生类中有效,并不会影响到基类(当然基类中的方法可以是普通的方法,也可以是虚拟的方法)。
代码如下:
using System;
namespace lht
{
class a
{
public void print()//普通的方法
{
Console.WriteLine("这个是基类中方法");
}
}
class b : a
{
new public void print()//隐藏基类的方法,在派生类中定义新的方法(关键字new)
{
Console.WriteLine("这个是派生类中的方法");
}
}
class c
{
static void Main()
{
b temp = new b();
a temp1 = new a();
temp.print();
temp1.print();
Console.ReadKey();
}
}
}
结果如下:
这个是派生类中的方法
这个是基类中方法
关于在C#中对类中的隐藏基类方法和重写方法的理解的更多相关文章
- c++中在一个类中定义另一个只有带参数构造函数的类的对象
c++中在一个类中定义另一个只有带参数构造函数的类的对象,编译通不过 #include<iostream> using namespace std; class A { public: ...
- Java中主类中定义方法加static和不加static的区别
Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...
- python---Django中模型类中Meta元对象了解
Django中模型类中Meta元对象了解 1.使用python manage.py shell 进入编辑命令行模式,可以直接进入项目(为我们配置好了环境) python manage.py shell ...
- C++中若类中没有默认构造函数,如何使用对象数组
前言: 如果定义一个类,有其默认的构造函数,则使用new动态实例化一个对象数组,不是件难事,如下代码: #include <memory> #include <iostream> ...
- 转载:java 中对类中的属性使用set/get方法的意义和用法
经常看到有朋友提到类似:对类中的属性使用set/get方法的作用?理论的回答当然是封闭性之类的,但是这样对我们有什么作用呢?为什么要这样设计?我直接使用属性名来访问不是更直接,代码更简洁明了吗?下面我 ...
- python中的类中属性元素加self.和不加self.的区别
在类中,self只能在函数中使用,表示的是实例属性,就是每个实例可以设置不值,而不相互影响.如果在类级别使用没有self的属性,是类属性,一般作为全局变量来用的.事实上:就是一个是类属性 一个是对象属 ...
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...
- 4. 在Inspector面板中显示类中变量+ 拓展编辑器
1. C#脚本如下: using UnityEngine; using System.Collections; public class MyTest : MonoBehaviour { ; ; [S ...
- java中File类中list()和listFiles()方法区别
list()和listFiles()方法区别: 1.返回值类型不同:前者为String数组,后者为File对象数组 2.数组中元素内容不同:前者为string类型的[文件名](包含后缀名),后者为Fi ...
随机推荐
- SPOJ - DETER3:Find The Determinant III (求解行列式)
Find The Determinant III 题目链接:https://vjudge.net/problem/SPOJ-DETER3 Description: Given a NxN matrix ...
- dns随笔(部分转载)
1.allow-notify allow-notify 定义了一个匹配列表并且只应用于从dns区域(slave zone),比如,这个列表是一个ip列表,它 2. 触发同步的过程 http://www ...
- activemq依赖包获取
现在项目中使用的是activemq-all.jar的jar,17M多,里面集成了日志.spring等相关的包.但项目启动时发现系统使用的是activemq包中的日志实现,没有用本项目的日志包.只能将整 ...
- Item 12 考虑实现Comparable接口
1.Comparable接口,用来做什么. 2.判定类实现的Comparable接口是否正确的方法. 3.不要扩展一个已经实现了Comparable接口的类来增加用于比较的值组件. 1.Com ...
- UOJ#204 【APIO2016】Boat
Time Limit: 70 Sec Memory Limit: 256 MBSubmit: 559 Solved: 248 Description 在首尔城中,汉江横贯东西.在汉江的北岸,从西向 ...
- python学习笔记(二)之python简单实践
1 安装python开发环境 Linux环境下自动安装好了python,可以通过以下命令更新到python最新版本. #echo "alias python=/usr/bin/python3 ...
- div 超出高度滚动条,超出宽度点点点
超出高度滚动条 style="width:230px; height: 180px; overflow: auto;" 超出宽度点点点 style="width: 220 ...
- Kill windows和linux 进程
Windows
- Python阶段复习 - part 3 - Python函数
利用函数打印9*9乘法表 def cheng(num): for i in range(1,num+1): for j in range(1,i+1): print('{0} * {1} = {2}' ...
- 【Python学习】程序运行完发送邮件提醒
有时候我们运行一个需要跑很长时间的程序,不管是在云主机还是本地主机上运行,我们都不可能一直守在电脑面前等.所以想到使用邮件来通知提醒. 示例代码如下 # -*- coding: utf-8 -*- # ...