C#中的虚方法和抽象方法的运用
今天在云和学院学了很多,我这次只能先总结一下C#中的虚方法和抽象的运用。
理论:
虚方法:
- 用virtual修饰的方法叫做虚方法
- 虚方法可以在子类中通过override关键字来重写
- 常见的虚方法:ToString() Equals
抽象方法:
- 抽象类与抽象方法由abstract修饰
- abstract的使用注意
–抽象方法没有方法体
–抽象成员只能存在于抽象类中
–抽象类可以有非抽象成员
–抽象类的派生类必须实现抽象方法体
–抽象类只能用作基类,无法实例化
补充:
重写:不同对象对于同一个方法调用的不同行为(指不同对象收到相同消息时,会产生不同行为)
实操:
定义一个People的父类,包括Name,Gender,Age,和一个PeoHi 的虚方法,定义两个子类Teacher,包括Year,Salary两个属性和一个PeoHi方法;子类Student,包括StadyNum和一个PeoHi方法.
定义子类Teacher(Student子类 与Teacher定义方法相同,这里不在介绍)
在Main函数里输出
输出结果
抽象方法,定义一个父类Person,和子类Chinese
以上就是C#中的虚方法和抽象方法的运用的详细内容,更多关于C# 虚方法和抽象方法的资料请关注我们其它相关文章!
相关推荐
-
C#抽象类与抽象方法详解
本文实例为大家分享了C#抽象类与抽象方法的具体实现代码,供大家参考,具体内容如下 1.代码 class Program { static void Main(string[] args) { for (int i = 1; i < 10; i++) { if (i % 3 == 1) { StorageDevice storge1 = new Upan("sandisk--" + i.ToString()); storge1.Inputdevice(); storge1.Writ
-
C#虚方法的声明和使用实例教程
本文以实例形式演示了C#虚方法的声明与使用.实例内容主要包括:演示虚方法的声明和使用,定义虚方法进而求几何面积,用虚方法求原始图形的面积.正方形的面积.等边三角形的面积.圆形的面积等. 实现代码如下: using System; public class Graph { protected double ParaVal; protected double pi = 3.1415926; public Graph ( double Para ) { ParaVal = Para; } //定义虚方
-
C#中抽象方法与虚拟方法的区别
学过C#的人应该都知道抽象方法与虚拟方法,而很多初学者对二者之间的区别并不是很了解.今天本文就来分析一下二者之间的区别.并附上实例加以说明.具体分析如下: 一.主要区别: 对于抽象方法,子类必须实现它. 对于虚拟方法,子类可以重写也可以不重写. 因此,两者约束不同 二.实例代码如下: /* 声明一个抽象类 * 1.抽象类中可以包含变量 * 2.抽象方法中无法声明方法体 */ abstract class AbsClass { string name; public abstract void D
-
C# 构造函数如何调用虚方法
谜题 在C#中,用virtual关键字修饰的方法(属性.事件)称为虚方法(属性.事件),表示该方法可以由派生类重写(override).虚方法是.NET中的重要概念,可以说在某种程度上,虚方法使得多态成为可能. 然而虚方法的使用却存在着很大学问,如果滥用的话势必对程序产生很大的负面影响.比如下面这个例子: public class Puzzle { public Puzzle() { Name = "Virtual member call in constructor"; Solve(
-
C# 抽象类,抽象属性,抽象方法(实例讲解)
抽象类往往用来表征对问题领域进行分析.设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象. 下面我们以水果为例,首先定义抽象类Fruit,抽象类中有公共属性vendor,抽象属性Price和抽象方法GrowInArea, public abstract class Fruit { public string vendor { get; set; } //默认为private public abstract float Price { get; } //抽象属性必须是公有的
-
C#中的虚方法和抽象方法的运用
今天在云和学院学了很多,我这次只能先总结一下C#中的虚方法和抽象的运用. 理论: 虚方法: 用virtual修饰的方法叫做虚方法 虚方法可以在子类中通过override关键字来重写 常见的虚方法:ToString() Equals 抽象方法: 抽象类与抽象方法由abstract修饰 abstract的使用注意 –抽象方法没有方法体 –抽象成员只能存在于抽象类中 –抽象类可以有非抽象成员 –抽象类的派生类必须实现抽象方法体 –抽象类只能用作基类,无法实例化 补充: 重写:不同对象对于同一个方法调用
-
asp.net 虚方法、抽象方法、接口疑问
一.抽象类中可以提供非抽象的执行方法吗?接口呢? 答:抽象类可以这么写: 复制代码 代码如下: public abstract class A { public string getWebUrl() { return "jb51.net"; } public abstract string getWebName(); } public class B : A { public override string getWebName() { return "我们"; }
-
C#中的虚函数virtual
一.简介 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数,其中那个申明时定义的类叫申明类,那个执行时实例化的类叫实例类.如:飞禽 bird = new 麻雀();那么飞禽就是申明类,麻雀是实例类. 具体的检查的流程如下: 1.当调用一个对象的函数时,系统会直接去检查这个对
-
c++ 构造函数中调用虚函数的实现方法
我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数.这种调用都是对象已经构建完成的情况.那如果在构造函数中调用虚函数,会怎么样呢? 有这么一段代码: class A { public: A ():m_iVal(0){test();} virtual void func() { std::cout<<m_iVal<<' ';} void test(){func();} public: int m_iVal; }; class B : public A {
-
C# 中的多态底层虚方法调用详情
目录 一.C# 中的多态玩法 1. 一个简单的 C# 例子 2. 汇编代码分析 (1)eax,dword ptr [ebp-8] (2)eax,dword ptr [eax] (3)eax,dword ptr [eax+28h] (4)call dword ptr [eax+10h] 三.总结 前言: 本质上来说,CoreCLR 也是 C++ 写的,所以也逃不过用 虚表 来实现多态的玩法, 不过玩法也稍微复杂了一些,希望本篇对大家有帮助. 一.C# 中的多态玩法 1. 一个简单的 C# 例子 为
-
基于多态之虚方法、抽象类、接口详解
虚方法: 1.在父类方法的返回值前加 virtual 关键字,标记为虚方法,表示这个方法可以被子类重写. 2.虚方法必须有方法体,方法体中可以没有任何内容. 3.子类可以根据需求选择性的是否重写虚方法.如果需要重写,在子类方法的返回值前加 override 关键字. 4.子类在重写虚方法时,可以根据需求选择性的是否使用 base 关键字调用父类中的该方法. 虚方法语法格式如下: public class Father { public virtual void Do() { //..... }
-
聊聊springmvc中controller的方法的参数注解方式
绪论 相信接触过springmvc的同学都知道,在springmvc的控制层中,我们在方法的参数中可以使用注解标识.比如下面例子: public Map<String, Object> login(@PathVariable("loginParams") String loginParams) @PathVariable注解就标识了这个参数是作为一个请求地址模板变量的(不清楚的同学可以先学习一下restful设计风格).这些注解都是spring内置注解,那么 我们可不可以自
-
几种判断asp.net中session过期方法的比较
方法一:最麻烦也是最容易想到的方法,在每个页面的page_load()方法里面判断: 复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["username"] != null) { //登陆成功的情况
-
PHP中trait使用方法详细介绍
说通俗点,PHP中使用trait关键字是为了解决一个类既想集成基类的属性和方法,又想拥有别的基类的方法,而trait一般情况下是和use搭配使用的. <?php trait Drive { public $carName = 'trait'; public function driving() { echo "driving {$this->carName}\n"; } } class Person { public function eat() { echo "
随机推荐
- flex通过js获取ip和pcname示例代码
- jQuery页面加载初始化的3种方法(推荐)
- springMVC实现前台带进度条文件上传的示例代码
- 关于微信上网页图片点击全屏放大效果
- 微信小程序利用co处理异步流程的方法教程
- PHP中创建和验证哈希的简单方法实探
- python操作摄像头截图实现远程监控的例子
- php session和cookie使用说明
- mysql 编码设置命令
- Ruby中调用执行shell命令的6种方法
- 微信小程序登录态控制深入分析
- 使用Nginx实现负载均衡的策略
- java从mysql导出数据的具体实例
- R语言 vs Python对比:数据分析哪家强?
- 对numpy 数组和矩阵的乘法的进一步理解
- Python面向对象实现一个对象调用另一个对象操作示例
- java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)
- 详解Vue-cli3.X使用px2rem遇到的问题
- django 连接数据库 sqlite的例子
- 详解webpack4升级指南以及从webpack3.x迁移