Csharp多态的实现(虚方法)
1.什么是抽象类
1.1虚方法是用virtual修饰,在子类中用override进行重写
1.2虚方法是一个方法,放在类里面(可以再下面的代码中看到)
1.3虚方法可以 重写,也可以不重写(这个可以再下面的代码中看到)
2.多态的实现
2.1什么都不说了,直接上代码,然后我在解释吧
//先在命名空间下定义一个类,类里面放虚方法
class Person
{
//类是指具有统一特征和行为的抽象,比如说电脑
//对象是类的具体,比如说这个电脑,你眼前的这个电脑,具体的这个电脑
//类中可以有字段,属性和方法
private string _name; //字段
public string name//属性
{
get
{
return _name;
}
set
{
_name = value;
}
}
private float _height;
public float height//属性
{
get
{
return _height;
}
set
{
_height = value;
}
}
private int _age;
public int age//属性
{
get
{
return _age;
}
set
{
if(age<0)
{
_age = 0;
}
_age = value;
}
}
private char _sex;
public char sex
{
get
{
return _sex;
}
set
{
if(sex == '女'||sex == '男')
_sex = value;
else
_sex = '男';
} } public virtual void say()//虚方法
{
Console.WriteLine("你好,我是一个人类,我叫{0}",_name);
} //在定义一个Teacher类,继承Person,在子类中重写虚方法
class Teacher:Person
{
private string _address;
public string address//在子类中新增加的属性
{
get
{
return _address;
}
set
{
_address = value;
}
}
public override void say()//虚方法重写
{
Console.WriteLine("我是一个老师,我叫{0}",name);
} //在定义一个Student类,继承Person,在子类中重写虚方法
class Students:Person
{
private int _stuId;
public int stuId
{
get
{
return _stuId;
}
set
{
_stuId = value;
}
}
// public override void say() //虚方法可以重写,也可以不重写
// {
// Console.WriteLine("大家好,我是一名学生,我叫{0}",name);
// }
}
2.2接下面来看看上面的代码,至于具体的语法这里就不细说了,都是基础的,今天主要看一下虚方法实现多态, 定义一个父类变量Person p= new Students(); p = new Teacher();
在这里我们可以运行代码看到,Person的对象p可以表现出Students类的特征或者Teacher的一些特征,这就是多态,子类表现出不同的形态.
2.2.1 使用多态的时候,系统先检测父类中的方法是否有virtual关键字,即检查是否重写,如果没有重写直接调用父类中的方法,如果重写了,就会转到相应的子类中调用重写的方法
2.2.2 在子类中新添加的属性,方法等,在用虚方法实现多态的时候,是调用不到的, 对于这个个人是这样理解的,因为子类是继承与父类的,所以子类里面的一些属性,父类里面是不存的,这样的话,在创建出子类对象然后转化为父类的时候,一些属性就用不了了
2.2.3 父类里面先装了学生类,然后然后又装了老师类, 装了那个类的对象,父类就会表现是那个类的特征,从而实现多态
Csharp多态的实现概述
Csharp多态的实现(虚方法)的更多相关文章
- c# 多态实现_虚方法
实现方法: 虚方法, 抽象类, 接口 1.虚方法 将父类的方法标记为虚方法,使用关键字virtual,这个方法可以被子类重新写一遍. 在父类的方法前面加上一个virtual,在子类的方法前面加上一个o ...
- c# 多态的美丽(虚方法、抽象、接口实现)
面向对象3大特性:封装.继承.多态. 面向对象2大原则: 1)里氏替换原则:子类可以给父类,父类不能赋给子类. 2)开放封闭原则: 封装变化,降低耦合.(对扩展开放,对修改封闭) ********** ...
- C#多态联系之虚方法
class Class1 { static void Main(string[] args) { YuanGong yg = new YuanGong(); JingLi jl = new JingL ...
- Csharp多态的实现概述
(1)什么是多态, 多态就是一个类表现出多种不同的形态, 他的核心是子类对象作为父类对象使用 (2)怎么实现多态, 在Csharp中,可以用接口, 虚方法, 抽象类实现多态,当然,不管是这三种的那一个 ...
- 【M24】了解虚方法、多继承、虚基类、RTTI的成本
1.编译器必须实现出C++语言的特性.一般情况下,我们只需要使用这些特性就好了,不需要关心内部的实现细节.但是,有些特性的实现,会对对象的大小和成员方法的执行速度造成影响.因此,有必要了解内部实现的细 ...
- C# 工厂模式+虚方法(接口、抽象方法)实现多态
面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...
- 《转》 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向对象 ...
- C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-
1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...
- C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)
多态 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方法. 编译时的多态性:编译时的多态性是通过重载来实现的.对于非虚的成员来说 ...
随机推荐
- Hibernate 、多表关联映射 - 多对多关系映射(many-to-many)
hibernate.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...
- R实战读书笔记四
第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括例如以下. 一图胜千字,人们从视觉层更易获取和理解 ...
- 微软将Bing变开放平台 同谷歌争夺开发者
微软在编译者大会上宣布将Bing作为平台开放,此举显然旨在改变谷歌(微博)一家独大的局面. 报道称,微软知道如何创建平台.因此当它发布新平台时,都值得业界仔细关注.就在上周之前,微软Bing给大家的印 ...
- C#中log4net使用方法(一)
Log4net是一个第三方开源组件,它设计的主要目的是组合,生成日志信息,同时将配置保存到各种存储介质或者展现平台中,在实际项目中,Log4net可以保存系统运行情况,可以在系统出现异常时,根据保存的 ...
- Sizzle一步步实现所有功能(基本筛选)
第二步:实现:first,:last,:eq(),even,odd,:gt(),:lt(); :header,:root,:taget; :not(). ;(function( window ){ v ...
- 《Oracle Applications DBA 基础》- 9 - Concurrent Processing[Z]
<Oracle Applications DBA 基础>- 9 - Concurrent Processing================================== 参考资料 ...
- 《转载》详解 CSS 属性 - 伪类和伪元素的区别
首先,阅读 w3c 对两者的定义: CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪元素用于将特殊的效果添加到某些选择器. 可以明确两点,第一两者都与选择器相关,第二就是添加一些“特殊”的效果 ...
- php7 install memcached extension
#download source code package from git $ git clone https://github.com/php-memcached-dev/php-memcache ...
- 在网页中使用javascript提供反馈信息
一,使用document.write() 二,使用window方法,prompt(),alert()和confirm() <html lang="en"> < ...
- Deleted pointer causes undefined behaviour
这文章是早期闲得用英文写的,删除了怪可惜的,贴出来证明自己会英文算了... Occasionally,on stackoverflow.com,I found a classic problem wh ...