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多态的实现(虚方法)的更多相关文章

  1. c# 多态实现_虚方法

    实现方法: 虚方法, 抽象类, 接口 1.虚方法 将父类的方法标记为虚方法,使用关键字virtual,这个方法可以被子类重新写一遍. 在父类的方法前面加上一个virtual,在子类的方法前面加上一个o ...

  2. c# 多态的美丽(虚方法、抽象、接口实现)

    面向对象3大特性:封装.继承.多态. 面向对象2大原则: 1)里氏替换原则:子类可以给父类,父类不能赋给子类. 2)开放封闭原则: 封装变化,降低耦合.(对扩展开放,对修改封闭) ********** ...

  3. C#多态联系之虚方法

    class Class1 { static void Main(string[] args) { YuanGong yg = new YuanGong(); JingLi jl = new JingL ...

  4. Csharp多态的实现概述

    (1)什么是多态, 多态就是一个类表现出多种不同的形态, 他的核心是子类对象作为父类对象使用 (2)怎么实现多态, 在Csharp中,可以用接口, 虚方法, 抽象类实现多态,当然,不管是这三种的那一个 ...

  5. 【M24】了解虚方法、多继承、虚基类、RTTI的成本

    1.编译器必须实现出C++语言的特性.一般情况下,我们只需要使用这些特性就好了,不需要关心内部的实现细节.但是,有些特性的实现,会对对象的大小和成员方法的执行速度造成影响.因此,有必要了解内部实现的细 ...

  6. C# 工厂模式+虚方法(接口、抽象方法)实现多态

    面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...

  7. 《转》 浅谈C# 多态的魅力(虚方法,抽象,接口实现)

    前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向对象 ...

  8. C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-

    1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...

  9. C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

    多态 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方法. 编译时的多态性:编译时的多态性是通过重载来实现的.对于非虚的成员来说 ...

随机推荐

  1. windows更改DNS设置

    浏览器解析域名时,首先在本地的host文件中查找记录, HOSTS文件记录的地址在: 将注释去掉 访问ysp.tlmall.com 会访问127.0.0.1

  2. 如何将你牛逼的iOS代码分享到CocoaPod(转)

    为了让读者一目了然,现在就从新建工程到最后提交podspec,简单粗暴的讲一通.Cocoapods不用解释太多,一句话...它是目前iOS开发中最广为使用的第三方库依赖管理工具. 下面开始讲创建pod ...

  3. Web API核查表:设计、测试、发布API时需思考的43件事[转]

    Web API核查表:设计.测试.发布API时需思考的43件事   当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...

  4. AngularJs(五)从Controller控制器谈谈$scope作用域

    大纲 用于简单示例和简单应用的controller 应用 多个controller应用的作用域问题 controller继承作用域问题 Controller的创建 AngularJs controll ...

  5. wcf系列学习5天速成——第四天 wcf之分布式架构

    今天是wcf系列的第四天,也该出手压轴戏了.嗯,现在的大型架构,都是神马的, nginx鸡群,iis鸡群,wcf鸡群,DB鸡群,由一个人作战变成了群殴....... 今天我就分享下wcf鸡群,高性能架 ...

  6. Eclipse 完全 设置UTF-8 环境

    当开始一个新的Java项目时,最好将整个环境设置为UTF-8 一般通过如下几步来设置: 1: 设置工作空间的编码格式:Window -> Preferences -> General -& ...

  7. Activiti5 待审 待批任务 TaskQuery查询 条件查询 like查询

    TaskQuery查询API 有两种方法可以从引擎中查询数据:查询API和原生查询.查询API提供了完全类型安全的API. 你可以为自己的查询条件添加很多条件 (所以条件都以AND组合)和精确的排序条 ...

  8. 移动端js插件分享

    分享几个移动端使用的插件,个人感觉挺不错的. 1. TouchSlide1.1 滑动的焦点图  http://pan.baidu.com/s/1i3J6bbB 2. iscroll.js  模拟滚动条 ...

  9. 用Servlet实现聊天室设计

    实验一   Servlet编程 一.实验目的 1.熟悉Java EE编程环境JDK和NetBeans的安装,配置和使用: 2.掌握Servlet的编写及部署: 3.掌握Servlet的工作原理和编程接 ...

  10. PHP静态成员变量和非静态成员变量

    数据成员可以分静态变量.非静态变量两种. 静态成员: 静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会 ...