如果诸葛亮用C#写出师表...
看到一篇18年的文章 "C++版《出师表》",站长觉得挺有意思的,就用C# 控制台也实现了一遍,技术上没啥难度,但复制代码费了1、2个小时,纯粹无聊写着玩,看者别在意枚举、类名、变量中文命名,纯粹为了娱乐。
出师表背景(照抄原文)
今天让我们码农以特有的方式,来表达对丞相大人的敬仰与怀念!
蜀章武元年(221年),刘备称帝,诸葛亮为丞相。蜀汉建兴元年(223年),刘备病死,将刘禅托付给诸葛亮。诸葛亮实行了一系列比较正确的政治和经济措施,使蜀汉境内呈现兴旺景象。为了实现全国统一,诸葛亮在平息南方叛乱之后,于建兴五年(227年)决定北上伐魏,拟夺取魏的长安,临行之前上书后主,即这篇《出师表》。
C# 源码
定义的一些类、枚举
public enum 王道 { 明, 昏 };
/// <summary>
/// 先帝,陛下,文景,桓灵
/// </summary>
public class 君
{
  public string 名称;
  public bool 在;
  public 王道 为君;
  public 君()
  {
    在 = true;
    为君 = 王道.明;
  }
  public bool 创业(double percentage)
  {
    if (percentage < 0.5)
    {
      在 = false;
      Console.WriteLine($"{名称}创业未半而中道崩殂!");
      return false;
    }
    else
    {
      Console.WriteLine(@"{名称}兴复汉室,还于旧都!");
      return true;
    }
  }
  public void 开张圣听()
  {
    Console.WriteLine("开张圣听,光先帝遗德!");
  }
  public void 恢弘志士之气() { }
  public void 宾自菲薄() { }
  public void 引喻失义()
  {
    Console.WriteLine("塞忠谏之路!");
  }
  public void 亲贤臣远小人()
  {
    为君 = 王道.明;
  }
  public void 亲小人远贤臣()
  {
    为君 = 王道.昏;
  }
  public void 治国() { }
  public void 偏私()
  {
    Console.WriteLine("内外异法!");
  }
  public bool 咨之(string 事)
  {
    if (王道.明 == 为君)
    {
      return true;
    }
    return false;
  }
  public bool 施行(string 事)
  {
    return true;
  }
  public void 曰(string 言)
  {
    Console.WriteLine(言);
  }
  public void 每与臣论此事()
  {
    Console.WriteLine("叹息痛恨于桓灵。");
  }
  ~君() { }
}
public enum 臣德 { 贤, 奸 }
public class 侍卫之臣
{
  private 君 刘备 = new 君();
  private 君 刘禅 = new 君();
  public string 名称;
  public 臣德 为臣;
  public void 不懈于内()
  {
    Console.WriteLine($"侍卫之臣({名称})不懈于内");
  }
  public bool 追先帝之殊遇()
  {
    if (刘备.为君 == 王道.明)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  public bool 报之于陛下()
  {
    if (刘禅.为君 == 王道.明)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  public bool 谋事(string 事)
  {
    if (为臣 == 臣德.贤)
    {
      return true;
    }
    return false;
  }
}
class 忠志之士
{
  private 君 刘备 = new 君();
  private 君 刘禅 = new 君();
  public string 名称;
  public 臣德 为臣 = new();
  public void 忘身于外()
  {
    Console.WriteLine($"忠志之士({名称})忘身于外!");
  }
  public bool 追先帝之殊遇()
  {
    if (刘备.为君 == 王道.明)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  public bool 报之于陛下()
  {
    if (刘禅.为君 == 王道.明)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  public bool 谋事(string 事)
  {
    if (为臣 == 臣德.贤)
    {
      return true;
    }
    return false;
  }
}
public enum 气候 { 兴盛, 疲弊, 兴隆, 倾颓 }
/// <summary>
/// 曹魏,东吴,益州,先汉,后汉
/// </summary>
public class 国
{
  public 气候 国运;
  public 国()
  {
    国运 = 气候.兴盛;
  }
  public void 付诸有司论其刑赏(侍卫之臣 臣)
  {
    if (臣.为臣 == 臣德.贤)
    {
      Console.WriteLine("赏!");
    }
    else
    {
      Console.WriteLine("刑!");
    }
  }
  ~国() { }
}
/// <summary>
/// 郭攸之,费祎
/// </summary>
public class 侍中 : 侍卫之臣 { };
/// <summary>
/// 董允
/// </summary>
public class 侍郎 : 侍卫之臣 { }
/// <summary>
/// 陈震
/// </summary>
public class 尚书 : 侍卫之臣 { }
/// <summary>
/// 张裔
/// </summary>
public class 长史 : 侍卫之臣 { }
/// <summary>
/// 蒋琬
/// </summary>
public class 参季 : 侍卫之臣 { }
/// <summary>
/// 向宠
/// </summary>
class 中都督 : 忠志之士 { }
/// <summary>
/// 诸葛亮
/// </summary>
class 丞相 : 侍卫之臣
{
  public void 回首往事()
  {
    Console.WriteLine("臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸候。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值巅覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。");
  }
  public void 表忠心()
  {
    Console.WriteLine("先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明。故五月渡泸,深入不毛。");
  }
  public void 请战()
  {
    Console.WriteLine("今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室, 还于旧都。");
  }
  public void 道别()
  {
    Console.WriteLine("今当远离, 临表涕零, 不知所言。");
  }
}
Main方法
static void Main(string[] args)
{
  君 先帝 = new 君();
  先帝.名称 = "先帝";
  先帝.创业(0.49);
  国 益州 = new 国();
  益州.国运 = 气候.疲弊;
  Console.WriteLine("此诚危急存亡之秋也!");
  侍中 郭攸之 = new 侍中();
  郭攸之.名称 = "郭攸之";
  if (郭攸之.追先帝之殊遇() && 郭攸之.报之于陛下())
  {
    郭攸之.不懈于内();
  }
  侍中 费祎 = new 侍中();
  费祎.名称 = "费祎";
  if (费祎.追先帝之殊遇() && 费祎.报之于陛下())
  {
    费祎.不懈于内();
  }
  侍郎 董允 = new 侍郎();
  董允.名称 = "董允";
  if (董允.追先帝之殊遇() && 董允.报之于陛下())
  {
    董允.不懈于内();
  }
  中都督 向宠 = new 中都督();
  向宠.名称 = "向宠";
  if (向宠.追先帝之殊遇() && 向宠.报之于陛下())
  {
    向宠.忘身于外();
  }
  君 陛下 = new 君();
  if (陛下.为君 == 王道.明)
  {
    陛下.开张圣听();
    陛下.恢弘志士之气();
  }
  else
  {
    陛下.宾自菲薄();
    陛下.引喻失义();
  }
  陛下.治国();
  bool 宫中 = false;
  bool 府中 = false;
  bool 陟臧 = false;
  bool 罚否 = false;
  Debug.Assert(宫中 == 府中);
  Debug.Assert(陟臧 == 罚否);
  侍卫之臣 作奸犯科者 = new 侍卫之臣();
  作奸犯科者.为臣 = 臣德.奸;
  侍卫之臣 为忠善者 = new 侍卫之臣();
  为忠善者.为臣 = 臣德.贤;
  if (陛下.为君 == 王道.明)
  {
    益州.付诸有司论其刑赏(作奸犯科者);
    益州.付诸有司论其刑赏(为忠善者);
  }
  else
  {
    陛下.偏私();
  }
  if (郭攸之.为臣 == 臣德.贤
    && 费祎.为臣 == 臣德.贤
    && 董允.为臣 == 臣德.贤)
  {
    Console.WriteLine("此皆良实,志虑忠纯,是以先帝简拔以遗陛下。");
  }
  string 宫中之事 = null;
  if (陛下.咨之(宫中之事)
    && 郭攸之.谋事(宫中之事)
    && 费祎.谋事(宫中之事)
    && 董允.谋事(宫中之事))
  {
    陛下.施行(宫中之事);
    Console.WriteLine("裨补阙病, 有所广益");
  }
  if (向宠.为臣 == 臣德.贤)
  {
    Console.WriteLine("性行淑均,晓畅军事。");
    Console.Write("先帝称之曰:");
    先帝.曰("能");
    Console.WriteLine("是以众议举宠为督。");
  }
  string 营中之事 = null;
  if (陛下.咨之(营中之事))
  {
    陛下.施行(宫中之事);
    Console.WriteLine("行阵和睦,优劣得所!");
  }
  君 文景 = new 君();
  君 恒灵 = new 君();
  国 先汉 = new 国();
  国 后汉 = new 国();
  文景.亲贤臣远小人();
  先汉.国运 = 气候.兴隆;
  恒灵.亲小人远贤臣();
  后汉.国运 = 气候.倾颓;
  do
  {
    先帝.每与臣论此事();
  } while (先帝.在);
  if (郭攸之.为臣 == 臣德.贤
          && 费祎.为臣 == 臣德.贤
          && 董允.为臣 == 臣德.贤)
  {
    Console.WriteLine("此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。");
  }
  丞相 诸葛亮 = new 丞相();
  诸葛亮.回首往事();
  诸葛亮.表忠心();
  诸葛亮.请战(); // 此臣所以报先帝而忠陛下之职分也
  诸葛亮.道别();
}
代码输出《出师表》

先帝创业未半而中道崩殂!
此诚危急存亡之秋也!
侍卫之臣(郭攸之)不懈于内
侍卫之臣(费祎)不懈于内
侍卫之臣(董允)不懈于内
忠志之士(向宠)忘身于外!
开张圣听,光先帝遗德!
刑!
赏!
此皆良实,志虑忠纯,是以先帝简拔以遗陛下。
裨补阙病, 有所广益
性行淑均,晓畅军事。
先帝称之曰:能
是以众议举宠为督。
行阵和睦,优劣得所!
叹息痛恨于桓灵。
此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。
臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸候。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值巅覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明。故五月渡泸,深入不毛。
今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室, 还于旧都。
今当远离, 临表涕零, 不知所言。
时间如流水,只能流去不流回。
- 公众号:Dotnet9
- 号主微信号:dotnet9
- 作者、编辑:沙漠之尽头的狼
- 首发:https://dotnet9.com/17536.html
- 日期:2021-03-13
如果诸葛亮用C#写出师表...的更多相关文章
- HDU 5183 Negative and Positive (NP)  ——(后缀和+手写hash表)
		根据奇偶开两个hash表来记录后缀和.注意set会被卡,要手写hash表. 具体见代码: #include <stdio.h> #include <algorithm> #in ... 
- Delphi在win7/vista下写注册表等需要管理员权限的解决方案
		看到论坛好多人问win7下写注册表的问题,我结合自己的理解写了一点东西,首先声明一下,本人初学Delphi,水平有限,大家见笑了,有什么不对之处请老鸟多指点. [背景]win7/Vista提供的UAC ... 
- VB6之写注册表
		难免会遇到写注册表的情况,写了个实用点的RegWrite函数.为了减少代码量,用WScript.Shell取代了API来实现. 使用方式就在注释中了,就不再过多解释了.PS:注释比实现代码要丰富多了, ... 
- IE 内使用ActiveX,写注册表被重定向到如下注册表
		IE 内使用ActiveX,写注册表被重定向到如下注册表,所以使用注册表做标记要注意下,目前还没找为什么会这样 HKEY_CURRENT_USER\Software\Microsoft\Interne ... 
- C++写注册表
		1. 注册表简介 注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息.16位驱动在Winnt (Win ... 
- Django中三种方式写form表单
		除了在html中自己手写form表单外,django还可以通过 继承django.forms.Form 或django.forms.ModelForm两个类来自动生成form表单,下面依次利用三种方式 ... 
- 太刺激了,面试官让我手写跳表,而我用两种实现方式吊打了TA!
		前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥. 上一节,我们一起学习了关于跳表的理论知识,相信通过上一节的学习,你一定可以给面试官完完 ... 
- python xlwt写Excel表
		1 xlwt第三方库 说明:xlwt是一个用于将数据和格式化信息写入并生成Excel文件的库. 注意:xlwt不支持写xlsx表,打开表文件报错. 官方文档:https://xlwt.readthed ... 
- 关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)
		相信用过hibernate的兄弟们都会因为多表复杂查询后,为返回的结果如何组装到一个VO中而烦恼不已.我也不停的为此而烦恼,但是在看了hibernate的transform后,感觉这个方法还挺管用的. ... 
- 用 C# 在 Windows 7 中写注册表想到的
		摘自:http://blog.163.com/dpj_001/blog/static/2742941520110251500753/ 某日做一个项目,需要在注册表中加入键,同时写值,操作系统环境为 W ... 
随机推荐
- 16级C程序设计竞赛C题
			问题 C: 回文 时间限制: 1 Sec 内存限制: 128 MB提交: 74 解决: 36[提交][状态][讨论版] 题目描述 给定一个字符串,你可以对字符串做任意改动,你可以在任意地方增加一个 ... 
- Spring源码学习之Web数据绑定器WebDataBinder
			WebDataBinder 1.描述 特殊的数据绑定器用于从web请求参数到JavaBean对象的数据绑定.专为web环境,但不依赖于Servlet API;作为更具体的DataBinder变体的基类 ... 
- AES算法在网络安全中的应用:如何守护数据宝藏?
			摘要:高级加密标准(AES)是美国国家标准与技术研究所(NIST)用于加密电子数据的规范.本文从历史.算法原理.性能优势和应用等方面全面介绍了AES算法,旨在帮助读者更好地理解这一广泛应用的对称加密算 ... 
- 原生JavaScript 与 jQuery 执行Ajax请求
			原生JavaScript和jQuery都可以用来执行Ajax请求,以下是它们的基本实现方式的比较: 原生JavaScript实现Ajax请求: var xhr = new XMLHttpRequest ... 
- Java通过SSH连接路由器,输入命令并读取响应
			最近需要读取和修改华为路由器的配置,使用Java语言开发,通过SSH连接,输入命令并读取响应. 1.添加mwiede/jsch依赖 如果使用Maven,可以在pom.xml文件中添加以下依赖: < ... 
- gitlab jenkins 安装笔记
			gitlab gitlab ce是社区版本,ee是企业版本,称为gitee. https://packages.gitlab.com/gitlab/gitlab-ce/install 通过运行curl ... 
- 揭秘GES超大规模图计算引擎HyG:图切分
			摘要:GES大规模图计算引擎HyG通过实现不同的点边分区算法,可以灵活地供用户选择多种多样的切分策略,进而达到更好的运算性能. 本文分享自华为云社区<GES超大规模图计算引擎HyG揭秘之图切分& ... 
- 理论+实例,带你掌握Linux的页目录和页表
			摘要:操作系统在加载用户程序的时候,不仅仅需要分配物理内存,来存放程序的内容:而且还需要分配物理内存,用来保存程序的页目录和页表. 本文分享自华为云社区<Linux从头学15:[页目录和页表]- ... 
- JavaScript继承的实现方式:原型语言对象继承对象原理剖析
			面向对象编程:继承.封装.多态. 对象的继承:A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. 在经典的面向对象语言中,您可能倾向于定义类对象,然后您 ... 
- API 设计最佳实践(简版)
			Restful API 本文简称API,是一个种面向资源的架构.在Restful中一个API对应一个资源,资源可以是文本,图片,视频等.API特征有如下: 每一个URI代表一种资源 客户端和服务器之间 ... 
 
			
		