用《舌尖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#中的抽象工厂模式是什么概念!
抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象.本文采取的仍然是接着以前的那个快餐店的例子.现在,快餐店经常良好,逐渐发展壮大,为了适合不同地方人的饮食 ...
随机推荐
- 正则的replace函数传参使用
<script> var str = "a1ba2b"; var reg = /a.b/g; str = str.replace(reg,function(a,b){ ...
- 2013长春网赛1010 hdu 4768 Flyer
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768 题意:有n个社团发传单,每个社团发给编号为A_i, A_i+C_i,A_i+2*C_i,…A_i ...
- JIRA部署破解和confluence整合
JIRA是一个项目跟踪管理工具,帮助团队创建计划任务.构建并发布优秀的产品.全球成千上万的团队选择JIRA,用JIRA来捕获.组织管理缺陷.分配任务,跟踪团队的活动.不论在桌面PC还是移动终端设备上, ...
- kafka 数据一致性-leader,follower机制与zookeeper的区别;
我写了另一篇zookeeper选举机制的,可以参考:zookeeper 负载均衡 核心机制 包含ZAB协议(滴滴,阿里面试) 一.zookeeper 与kafka保持数据一致性的不同点: (1)zoo ...
- images & Skeleton
images & Skeleton image placeholder & loading ... skeleton.css https://github.com/dhg/Skelet ...
- Linux vi中查找字符内容的方法
使用vi编辑器编辑长文件时,常常是头昏眼花,也找不到需要更改的内容. 这时,使用查找功能尤为重要. 方法如下: 1.命令模式下输入“/字符串”,例如“/Section 3”. 2.如果查找下一个, ...
- in packet sniffer
in packet sniffer 来源 https://kb.fortinet.com/kb/microsites/search.do?cmd=displayKC&docType=kc&am ...
- 获取androdmanifest里面的meta-data
/* * Copyright 2017 JessYan * * Licensed under the Apache License, Version 2.0 (the "License&qu ...
- OI中的莫比乌斯反演
OI中的莫比乌斯反演 莫比乌斯函数 想要学习莫比乌斯反演,首先要学习莫比乌斯函数. 定义 莫比乌斯函数用\(\mu(x)\)表示.如果\(x\)是\(k\)个不同质数的积,则\(\mu(x) = (- ...
- Python里面这些点,据说80%的新手都会一脸懵逼
Python里面这些点,据说80%的新手都会一脸懵逼 菜鸟Python 关注 2018.10.10 12:51 字数 1833 阅读 123评论 0喜欢 10 Python虽然语法简单,通俗易懂,但是 ...