使用 CommandLineApplication 类创建专业的控制台程序
闲话
在很久很久以前,电脑是命令行/终端/控制台的天下,那屏幕上的光标在行云流水般的键盘敲击下欢快地飞跃着,那一行行的字符输出唰唰唰地滚动着……直到 Windows 95 的出现(那时候我还不知道苹果电脑和它的操作系统),我的鼠标终于不再召灰,开始有了用武之地,然后就是 GUI 的天下……
然而世事就是这样,锦绣繁华之后就开始返璞归真,大鱼大肉太多就向往点粗茶淡饭,开车开久了就怀念起自行车,GUI 充斥的 Windows 的世界里似乎也开始挂起一阵控制台的清风。毕竟,一旦你熟悉了各种命令和参数,敲键盘的速度还是胜过鼠标的,只是现在的人都太懒或者太忙,总是宁愿牺牲效率而不愿意去多记一点东西。
我个人还是很喜欢命令行的,尤其是远程访问一个系统的时候,一个简单的 ssh 命令直接登录到远程 Linux,一个简单的 scp 命令就可以互相传输文件,这种便利、快捷是 Windows 远程桌面所无法比拟的。GUI 也许是 Windows 的设计哲学, 做什么事情都要靠 GUI。 没错,这大大降低了各种操作门槛,但是作为一个程序员,GUI 工具并非总是最佳选择,但除了 GUI 工具,替代选择并不多——直到 .NET Core 的出现。
专业的控制台程序
首先我们要有个标准,怎样才算“专业的控制台程序”?
平常无论是写着玩还是工作需要,我都做过一些控制台程序,在启动参数的传入、解析和执行上都比较随意,类似 MyProgram abc 123 这样,MyProgram 是程序名,abc、123 是参数值,内部直接用 args[0]、args[1]取得参数值并使用。仅此而已。时间长了,自己都搞不懂每个参数什么意思,参数有哪些有效值,都得查源代码才知道,每个参数的顺序也很重要,颠倒不得。而内部实现上,至少是 Main 方法里是典型的面条式代码。由此可见,我的这些控制台程序,无论是外在,还是内在,都业余得很。
那一个专业的控制台程序应该是什么样的呢?
完善的帮助信息
当你面对一个陌生的命令行程序,或者重新面对你自己2个月之前写的命令行程序,你心里第一反应会是什么呢?让我猜猜,你的第一反应一定是“这货到底怎么用?”(不要告诉我我猜错了,我不相信
使用 CommandLineApplication 类创建专业的控制台程序的更多相关文章
- VB6 如何创建一个标准控制台程序
打开 VB6 并新建一个标准EXE程序,把窗口删掉,然后再加入一个模块. 在模块中加入AllocConsole.FreeConsole.SetConsoleTitle.Sleep的API声明: Pub ...
- vscode创建net core控制台程序
vscode近来深受的开发人员的喜爱.在下的前端同事们也纷纷使用vscode.在下就想了我等后端程序员也可以用vscode写C#代码.毕竟是从宇宙第一IDE ----Visual Studio衍生的 ...
- C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以 ...
- C#创建服务及使用程序自动安装服务
.NET创建一个即是可执行程序又是Windows服务的exe 不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给 ...
- C++ C++ 控制台程序 设置图标
. 实现过程 创建1个控制台程序. 新建1个 Resource Script文件 #include "stdio.h" #include <windows.h> #in ...
- 使用VSCode如何调试C#控制台程序_1
A-环境安装 https://www.microsoft.com/net/download 下载 .NET Core SDK Installer: https://www.microsoft.com/ ...
- C#:控制台程序调用中间库创建窗体
1.类库项目引用System.Windows.Forms并添加引用后,才可创建窗体. 2.控制台应用程序调用中间库(DLL)中的方法创建窗体:中间类库使用反射下的Assembly加载包含窗体的类库及创 ...
- 使用C#创建WCF服务控制台应用程序
本文属于原创,转载请注明出处,谢谢! 一.开发环境 操作系统:Windows 10 开发环境:VS2015 编程语言:C# IIS版本:10.0.0.0 二.添加WCF服务.Internet Info ...
- C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...
随机推荐
- 解决自定义leftBarButtonItem返回手势失效的方法
考虑到interactivePopGestureRecognizer也有delegate属性,替换默认的self.navigationController.interactivePopGestureR ...
- gradle多模块开发
参考文档:gradle的官方userguide.pdf文档的chapter 55和chapter 56.gradle的多模块或项目开发一定不会比maven差,在我看来!大的项目分成多个模块来开发是常事 ...
- HDU 2087 字符串
#include <stdio.h> #include <string.h> void main() { ) { ] = {'\0'}; ] = {'\0'}; ; scanf ...
- 成功开发iPhone软件的10个步骤
总结 几条要注意的原则: 1.了解你的用户,并与他们接触.交谈. 2.不要做虚幻的想象的设计,多从成功软件中汲取经验. 3.软件要设计得“小”. 4.找到足够多的设计方案,通过数量的累计来得到好的质量 ...
- 下载时,经常看见ASC、MD5、SHA1等,是干什么的呢?
一 进行文件一致性校验 为了确保你得到的文件是正确的版本,而没有被注入病毒和木马程序.例如我们经常在网上下载软件,而这些软件已经被注入了一些广告和病毒等,如果不进行文件与原始发布商的一致性校验的话,可 ...
- localstorage 和 sessionstorage 本地存储
在我们日常的工作和实际项目中,做好数据数据缓存可以是我们的程序执行效率更高,可以使我们避免重复请求 服务器,减轻服务器的压力,可以提高使用户的体验度. 那么 HTML5 存储的目标是什么? 1.解决存 ...
- LUA中将未分类数据分为测试集和训练集
require 'torch' require 'image' local setting = {parent_root = '/home/pxu/image'} function list_chil ...
- RubyOnRails local_assigns
http://api.rubyonrails.org/classes/ActionView/Template.html#method-i-local_assigns Returns a hash wi ...
- python拆分CANLog
通过CANOE 导出的log通常有很多个ID的数据,如何才能找到某一个ID下的特殊的信号?利用python可以简单的进行这个步骤,代码如下: 说明: 最终的效果是将log信息,分不同的ID进行拆分,并 ...
- Gulp真实项目用例
包括了less预编译,css压缩,html文件include引入,js混淆压缩,本地开发热刷新服务器,html压缩,版本号添加 github地址: gulpfile.js var gulp = req ...