using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//虚方法(virtual)
//virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。
//多态(Polymorphism)
//多态是指两个或多个属于不同类的对象,对同一个消息做出不同响应的能力。
namespace 虚方法
{
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B : A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class Program
{
static void Main(string[] args)
{
B b = new B();
A a = b;
a.F(); //"B.F"
b.F(); //"B.F"
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 虚方法1
{
//员工类
class Employee
{
protected string _name;
public Employee()
{ }
public Employee(string name)
{
_name = name;
} public virtual void StartWork() //虚方法
{
Console.Write(_name + "开始工作:");
}
}
//经理类
class Manager : Employee
{
//public Manager(string name)
//{
// base._name = name;
//}
//构造函数
public Manager(string name): base(name) //赋值给基类(Employee)构造函数name
{ }
//重写虚方法
public override void StartWork() //使用虚方法实现面向对象的多态
{
base.StartWork(); //调用基类的方法
Console.WriteLine("给员工下达任务");
}
}
//秘书类
class Secretary : Employee
{
public Secretary(string name) : base(name) { }
public override void StartWork()
{
base.StartWork();
Console.WriteLine("协助经理");
}
}
//销售类
class Seller : Employee
{
public Seller(string name) : base(name) { }
public override void StartWork()
{
base.StartWork();
Console.WriteLine("销售产品");
}
}
//财务类
class Accountant : Employee
{
public Accountant(string name) : base(name) { }
public override void StartWork()
{
base.StartWork();
Console.WriteLine("管理公司财政");
}
}
class Program
{
static void Main(string[] args)
{
Employee[] emp = new Employee[];
emp[] = new Manager("张三");
emp[] = new Secretary("李四");
emp[] = new Seller("王五");
emp[] = new Seller("马六");
emp[] = new Accountant("钱七");
Console.WriteLine("早上8点,开始工作");
foreach (Employee e in emp)
{
e.StartWork();
}
Console.ReadKey();
}
}
}

c# 虚方法(virtual)与 多态(Polymorphism)的更多相关文章

  1. 虚方法(virtual)

    虚方法(virtual) Virtual 关键字用于修饰方法.属性.索引器或事件声明,并且允许在派生类中重写这些对象. 看一段代码: using System ; class A { public v ...

  2. Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息

    Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息 http://www.cnblogs.com/zhwx/archive/2012/08/28/266055 ...

  3. 抽象方法(abstract method) 和 虚方法 (virtual method), 重载(overload) 和 重写(override)的区别于联系

    1. 抽象方法 (abstract method) 在抽象类中,可以存在没有实现的方法,只是该方法必须声明为abstract抽象方法. 在继承此抽象类的类中,通过给方法加上override关键字来实现 ...

  4. C#虚方法virtual详解

    转: http://www.cnblogs.com/jason_yjau/archive/2009/08/25/1553949.html C#虚方法virtual详解 在C++.Java等众多OOP语 ...

  5. 虚方法(virtual)和抽象方法(abstract)的和接口(interface)的区别

    虚方法(virtual)和抽象方法(abstract)的区别 2017年06月15日 13:41:26 阅读数:65 注:本文转载自 http://www.cnblogs.com/michaelxu/ ...

  6. 4.C#虚方法virtual详解

    C#虚方法virtual详解 在C++.Java等众多OOP语言里都可以看到virtual的身影,而C#作为一个完全面向对象的语言当然也不例外. 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数 ...

  7. 虚方法virtual详解

    虚方法virtual详解   从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在 ...

  8. 【C#基础概念】虚方法virtual

    目录: 一.虚方法的概念 二.虚方法的特点 三.虚方法的作用 四.虚方法的声明 五.虚方法的执行 六.虚拟类的规则 一.虚方法的概念 在C#中,虚方法就是可以被子类重写的方法,如果子类重写了虚方法,则 ...

  9. [转]虚方法(virtual)和抽象方法(abstract)的区别

    虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化.如: //抽象方法pub ...

  10. 虚方法(virtual)和抽象方法(abstract)的区别

    注:本文转载自 http://www.cnblogs.com/michaelxu/archive/2008/04/01/1132633.html 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别 ...

随机推荐

  1. GCD - Extreme (II) for(i=1;i<N;i++) for(j=i+1;j<=N;j++) { G+=gcd(i,j); } 推导分析+欧拉函数

    /** 题目:GCD - Extreme (II) 链接:https://vjudge.net/contest/154246#problem/O 题意: for(i=1;i<N;i++) for ...

  2. 手机端 html 页面

    <!doctype html> <html> <meta charset="utf-8"> <meta name="viewpo ...

  3. Java NIO(2):缓冲区基础

    缓冲区(Buffer)对象是面向块的I/O的基础,也是NIO的核心对象之一.在NIO中每一次I/O操作都离不开Buffer,每一次的读和写都是针对Buffer操作的.Buffer在实现上本质是一个数组 ...

  4. 嵌入式开发之davinci--- 8168 总的roi 编码

    http://bbs.61dsp.com/forum.php?mod=viewthread&tid=767

  5. (phpQuery)对网站产品信息采集代码的优化

    a.要采集的源链接: http://www.prospecbio.com/Recombinant_Proteins/ b.具体要求:

  6. Ant Design使用问题记录

    公司的测试管理平台前端使用的是Ant Design of React框架,后台使用的是python,数据库用的是mysql.没有参与前期的开发,听说是工作了10年积累下来的一个暂且可用的管理平台,开发 ...

  7. 爬虫-python调用百度API/requests

    from urllib.request import urlopen import requests import json url = "http://apis.baidu.com/txa ...

  8. Sequence I

    Sequence I (hdu 5918) Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  9. C语言8.3冒泡排序

    8.3.1 例8-5 题目:输入n个正整数,将他们从小到大排序后输出,要求使用冒泡排序法. 而在自己抄写代码的时候,出现了以下问题: # include<stdio.h> void bub ...

  10. Python 模块相对引用

    文件结构如下 python_directory/ ├── __init__.py └── app ├── __init__.py ├── sub1 │   ├── __init__.py │   └─ ...