用《舌尖2》去理解C#中的多态和开闭原则
一、常规写法
class Program
{
static void Main(string[] args)
{
Food f1 = Food.跳跳鱼红菇汤;
ShowMaterial(f1);
Food f2 = Food.歧山臊子面;
ShowMaterial(f2);
Food f3 = Food.四川泡菜;
ShowMaterial(f3);
Console.ReadLine();
}
static void ShowMaterial(Food food)
{
switch (food)
{
case Food.跳跳鱼红菇汤:
Console.WriteLine(string .Format("{0}食材:跳跳鱼、盐、豆腐、红菇。" , Food.跳跳鱼红菇汤.ToString()));
break;
case Food.歧山臊子面:
Console.WriteLine(string .Format("{0}食材:五花肉、面、葱、姜、干辣椒面、五香粉、十三香、盐、鸡蛋、蒜苗。" , Food.歧山臊子面.ToString()));
break;
case Food .四川泡菜:
Console.WriteLine(string .Format("{0}食材:萝卜、豇豆、包菜、盐、水、花椒、辣椒、姜、蒜。" , Food.四川泡菜.ToString()));
break;
}
}
enum Food
{
跳跳鱼红菇汤,
歧山臊子面,
四川泡菜
}
}
运行后屏幕显示:
二、多态写法
class Program
{
static void Main(string[] args)
{
Food f1 = new TiaoTiaoFish();//跳跳鱼
f1.ShowMaterial();
Food f2 = new SiChuanPaoCai();//泡菜
f2.ShowMaterial();
ShanDongBin bin = new ShanDongBin();//煎饼
bin.ShowMaterial();
Console.ReadLine();
}
}
abstract class Food
{
/// <summary>
/// 食物名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 显示食材的方法
/// </summary>
public abstract void ShowMaterial();
}
class TiaoTiaoFish : Food
{
public TiaoTiaoFish()
: base()
{
Name = "跳跳鱼红菇汤" ;
}
public override void ShowMaterial()
{
Console.WriteLine(string .Format("{0}食材:跳跳鱼、盐、豆腐、红菇。" , Name));
}
}
class QiShanNoodle : Food
{
public QiShanNoodle()
: base()
{
Name = "歧山臊子面" ;
}
public override void ShowMaterial()
{
Console.WriteLine(string .Format("{0}食材:五花肉、面、葱、姜、干辣椒面、五香粉、十三香、盐、鸡蛋、蒜苗。" , Name));
}
}
class SiChuanPaoCai : Food
{
public SiChuanPaoCai()
: base()
{
Name = "四川泡菜" ;
}
public override void ShowMaterial()
{
Console.WriteLine(string .Format("{0}食材:萝卜、豇豆、包菜、盐、水、花椒、辣椒、姜、蒜a。" , Name));
}
}
class ShanDongBin : Food
{
public ShanDongBin()
: base()
{
Name = "山东大煎饼" ;
}
public override void ShowMaterial()
{
Console.WriteLine(string .Format("{0}食材:杂粮煎饼、胡萝卜、香菜、香肠、葱花、榨菜、鸡蛋、甜面酱、芝麻酱。" , Name));
}
}
总结:
用《舌尖2》去理解C#中的多态和开闭原则的更多相关文章
- 深度分析:理解Java中的多态机制,一篇直接帮你掌握!
Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...
- 最简单直接地理解Java软件设计原则之开闭原则
写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...
- C# 实例解释面向对象编程中的开闭原则
在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...
- 用《捕鱼达人》去理解C#中的多线程
线程是进程中某个单一顺序的控制流,是程序运行中的调度单位,是程序执行流的最小单位,一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成. 线程自己不拥有系统资源,只拥有一点儿在运行中必 ...
- 以吃货的角度去理解云计算中On-Premise、IaaS、PaaS和SaaS
了解云计算的一定都听过四个“高大上”的概念:On-Premise(本地部署),IaaS(基础设施及服务).PaaS(平台即服务)和SaaS(软件即服务),这几个术语并不好理解.不过,如果你是个吃货,还 ...
- Java的JAVA_HOME、Path、CLASSPATH环境变量小结,可以借助这三个的配置去理解Oracle中的那几个环境变量的配置作用
问题:在哪里都能执行java命令,是和JAVA_HOME变量有关系呢还是path中指定的那个java路径呢?? 刚学Java的时候,很多jdk配置教程都要求设置JAVA_HOME.Path.CLASS ...
- 深入理解Java中的多态
一.什么是多态? 多态指同一个实体同时具有多种形式.它是面向对象程序设计(OOP)的一个重要特征.如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的. 二.多态是如何实现的? ...
- 简单理解C#中的抽象工厂模式是什么概念!
抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象.本文采取的仍然是接着以前的那个快餐店的例子.现在,快餐店经常良好,逐渐发展壮大,为了适合不同地方人的饮食 ...
随机推荐
- YQCB冲刺第二周第三天
今天的任务依旧查看消费明细的功能. 遇到的问题为显示消费记录时显示所有用户的消费记录. 站立会议 任务面板
- VMware 虚拟机CentOS 7 网路连接配置 无eth0简单解决办法
个人博客:http://www.cnblogs.com/miaojinmin799/ 在前面几步基本和网上linux配置差不多,最后一步要配置eth0时出现如图所示结果使用ifconfig -a命令 ...
- XML中<beans>属性
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...
- 第一个Sprint计划
时间:5月22-28日 (6天) 人员:杜殷浩(界面设计) 何广强(界面美化) 目标:将基本框架设计好,实现好.
- What is the difference between WinRT, UWP and WPF?
在学习UWP的过程中确实有这个迷惑,在此分享一下. UWP (Universal Windows platform), Metro and WinRT are all result of Micros ...
- vis.js绘图库的一个BUG以及源码修正
1. BUG 1.1 BUG触发情况 在使用vis.js绘图时,加入两个节点A和B之间既存在一条从A指向B的边,同时也存在一条从B指向A的边,那么这个绘图库就会崩溃. 1.2 BUG解析 vis.js ...
- Delphi cxGrid加行号
procedure SetRowNumber(var ASender: TcxGridTableView; AViewInfo: TcxCustomGridIndicatorItemViewInfo; ...
- Java之List排序功能举例
package test_demo; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
- 编译nginx平滑添加stream模块
1.操作背景 操作系统版本:CentOS Linux release (Core) nginx版本:1.13.4 nginx从1.9.0版本开始,新增了ngx_stream_core_module模块 ...
- nginx mp3
location /mp3 { alias "d:/mp3"; default_type audio/mpeg; autoindex on; }