C#学习笔记25: 控制台应用程序开发精讲
目录
1 基础知识
1.1 名称空间
1.2 接口(interface)
2 控制台的操作
2.1 输出文本到控制台
2.2 获取键盘的输入
2.3 命令行参数
2.4 设置控制台的外观
2.5 控制台的窗口区分析
1 基础知识
1.1 名称空间
命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。
在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。
定义命名空间:命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称。
using 关键字:表明程序使用的是给定命名空间中的名称。
嵌套命名空间:命名空间可以被嵌套,即您可以在一个命名空间内定义另一个命名空间。
名称空间 . 对象模型 对象实例 = new 名称空间 . 对象模型();
名称空间 | 描述 |
using.System | 包含系统定义数据类型、事件、时间处理程序的基本类 |
using.System.Data | 提供数据访问功能的名称空间和类 |
using.System.IO | 包含数据流读写相关的类 |
using System.Windows.Form | windows窗体开发所需要的窗体类 |
using System.Web | 所有网站开发所需要的类 |
1.2 接口(interface)
接口定义了所有类继承接口时应遵循的语法合同。
接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。
接口定义了属性、方法和事件的声明,使用interface关键字,通常以字母【 I 】开头,默认使用public修饰符,这些都是接口的成员。
接口只包含了成员的声明。成员的实现是派生类的责任。接口提供了派生类应遵循的标准结构。
接口使得实现接口的类或结构在形式上保持一致。
接口的特点:
- 继承于接口的类必须实现接口中的所有方法;继承于类的类不一定要实现所有的成员
- 类只能继承一个基类,但是类可以继承多个接口,用逗号隔开;多个接口的所有成员必须实现
- 接口是不能实例化的
例子:
2 控制台的操作
2.1 输出文本到控制台
函数名称 | 功能 |
Console.Write() | 两种重载版本:第一是将传入的参数对象视为字符串直接输出;第二种为输入格式化字符串 |
Console.WriteLine() | 每输出一次,就会在字符串的最后加上一个换行符 |
输出格式化字符串:
使用0开始的{}标记对应的索引位置应输出的对象,示例如下:
2.2 获取键盘的输入
函数名称 | 功能 |
Console.Read() | 每次仅读取一个字符,在用户输入【ctrl + z】时返回-1;否则在用户按下【Enter】后,读取输入的第一个字符 |
Console.ReadKey() | 读取用户输入的字符,返回一个ConsoleKeyInfo的结构 |
Console.ReadLine() | 每次读入一行,以字符串形式返回,得到的字符串不包括最后输入的换行符 |
用法要点:
- 单独调用Console.Read();只会读取输入的第一个字符,其后的字符会被丢弃
int k = Console.Read();
Console.WriteLine("{0}-{1}",(char)k, k.ToString());
- ConsoleKeyInfo结构
#region 程序集 mscorlib.dll, v4.0.30319
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\mscorlib.dll
#endregionnamespace System
{// 摘要:// 描述按下的控制台键,包括控制台键表示的字符以及 Shift、Alt 和 Ctrl 修改键的状态。[Serializable]public struct ConsoleKeyInfo{//// 摘要:// 用指定的字符、控制台键和修改键初始化 System.ConsoleKeyInfo 结构的新实例。//// 参数:// keyChar:// 与 key 参数对应的 Unicode 字符。//// key:// 与 keyChar 参数对应的控制台键。//// shift:// true 指示按下了 Shift 键;否则为 false。//// alt:// true 指示按下了 Alt 键;否则为 false。//// control:// true 指示按下了 Ctrl 键;否则为 false。//// 异常:// System.ArgumentOutOfRangeException:// key 参数的数值小于 0 或大于 255。public ConsoleKeyInfo(char keyChar, ConsoleKey key, bool shift, bool alt, bool control);// 摘要:// 指示指定的 System.ConsoleKeyInfo 对象是否不等。//// 参数:// a:// A System.ConsoleKeyInfo object.//// b:// 一个 System.ConsoleKeyInfo 对象。//// 返回结果:// 如果 a 不等于 b,则为 true;否则为 false。public static bool operator !=(ConsoleKeyInfo a, ConsoleKeyInfo b);//// 摘要:// 指示指定的 System.ConsoleKeyInfo 对象是否相等。//// 参数:// a:// A System.ConsoleKeyInfo object.//// b:// 一个 System.ConsoleKeyInfo 对象。//// 返回结果:// 如果 a 等于 b,则为 true;否则为 false。public static bool operator ==(ConsoleKeyInfo a, ConsoleKeyInfo b);// 摘要:// 获取当前 System.ConsoleKeyInfo 对象表示的控制台键。//// 返回结果:// 标识按下的控制台键的 System.ConsoleKey 值。public ConsoleKey Key { get; }//// 摘要:// 获取当前 System.ConsoleKeyInfo 对象表示的 Unicode 字符。//// 返回结果:// 与当前 System.ConsoleKeyInfo 对象表示的控制台键对应的 System.Char 对象。public char KeyChar { get; }//// 摘要:// 获取 System.ConsoleModifiers 值的一个按位组合,指定与控制台键同时按下的一个或多个修改键。//// 返回结果:// System.ConsoleModifiers 值的按位组合。没有默认值。public ConsoleModifiers Modifiers { get; }// 摘要:// 获取一个值,该值指示指定的 System.ConsoleKeyInfo 对象是否等于当前的 System.ConsoleKeyInfo 对象。//// 参数:// obj:// 要与当前 System.ConsoleKeyInfo 对象进行比较的 System.ConsoleKeyInfo 对象。//// 返回结果:// 如果 obj 等于当前的 System.ConsoleKeyInfo 对象,则为 true;否则为 false。public bool Equals(ConsoleKeyInfo obj);//// 摘要:// 获取一个值,该值指示指定的对象是否等于当前的 System.ConsoleKeyInfo 对象。//// 参数:// value:// 要与当前的 System.ConsoleKeyInfo 对象进行比较的对象。//// 返回结果:// 如果 value 为等于当前的 System.ConsoleKeyInfo 对象的 System.ConsoleKeyInfo 对象,则为 true;否则为// false。public override bool Equals(object value);//// 摘要:// 返回当前 System.ConsoleKeyInfo 对象的哈希代码。//// 返回结果:// 32 位有符号整数哈希代码。public override int GetHashCode();}
}
- Console.ReadLine()
string k = Console.ReadLine();
Console.WriteLine(k);
2.3 命令行参数
为应用程序指定命令行参数
Main函数的args参数就是可以从外部向应用程序传递的命令行参数,解析该参数的方法有两种:直接解析法:直接解析用户给args参数传递的数据,但该方法只能在Main函数中对args传入数据进行解析;如果需要在程序的其他位置对传入的命令行参数进行解析,就需要使用Environment.GetCommandLineArgs方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace main
{class Program{static void Main(string[] args){foreach (string str in args){Console.WriteLine("直接解析法:" + str);//用户为输入命令行时,args为空 }Console.WriteLine();//Environment.GetCommandLineArgs解析法var paras = Environment.GetCommandLineArgs();foreach(string str in paras){Console.WriteLine("Environment.GetCommandLineArgs方法" + str);//用户为输入命令行时,paras为exe的路径}}}
}
程序运行结果
2.4 设置控制台的外观
Console.Title = "控制台应用程序精讲";//设置控制台的标题Console.ForegroundColor = ConsoleColor.Cyan;//设置背景色Console.BackgroundColor = ConsoleColor.Blue;//设置前景色Console.ResetColor();//将前景色和背景色重置为默认值
2.5 控制台的窗口区分析
控制台包括窗口区和缓冲区两个概念,如下图:
Console.Title = "控制台应用程序精讲";Console.ForegroundColor = ConsoleColor.Cyan;Console.BackgroundColor = ConsoleColor.Blue;Console.SetWindowSize(50, 33);Console.SetBufferSize(70, 100);//设置缓冲区为70列8行Console.SetWindowPosition(0, 0);//控制台窗口相对于缓冲区的位置Console.WriteLine("控制台的缓冲区宽度:{0}", Console.BufferWidth.ToString());Console.WriteLine("控制台的缓冲区高度:{0}", Console.BufferHeight.ToString());Console.WriteLine("控制台的最大行数:{0}", Console.LargestWindowHeight);Console.WriteLine("控制台的最大列数:{0}", Console.LargestWindowWidth);Console.WriteLine("控制台的窗口宽度:{0}", Console.WindowWidth);Console.WriteLine("控制台的窗口高度:{0}", Console.WindowHeight);
缓冲区的大小应大于窗口的大小,窗口尺寸不能大于控制台的最大行数和列数
C#学习笔记25: 控制台应用程序开发精讲相关推荐
- 【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-6 迪米特原则(最少知道原则)...
/** * 软件设计七大原则-迪米特原则 学习笔记 * @author cnRicky * @date 2018.11.10 */ 迪米特原则(最少知道原则) 一个对象应该对其他对象保持最少的了解.又 ...
- 网络工程师学习笔记——RIP路由汇总实验配置精讲
一.RIP路由汇总功能介绍 rip的路由汇总功能,能够对rip 学习/自己产生 的明细路由做汇总后传递给rip邻居,减少路由器的路由条目 需要更多网工学习资料,HCIA/HCIP/HCIE学习视频,可 ...
- 学习笔记(01):C++基础入门21 精讲-01_C++基础课程的安排和需要持之以恒的学习态度...
立即学习:https://edu.csdn.net/course/play/885/12312?utm_source=blogtoedu 李担心
- Android学习笔记之(一)开发环境搭建
Android学习笔记之(一)开发环境搭建 zouxy09@qq.com http://blog.csdn.net/zouxy09 至于说Android是什么之类的俺就不啰嗦了,因为它离我们太近了.直 ...
- Python自动化学习笔记(八)——接口开发、发送网络请求、发送邮件、写日志...
1.接口开发(flask模块) Python自动化学习笔记(七)接口开发部分的内容补充 1.1参数为json格式: flask.request.is_json #判断参数是否是json格式 flask ...
- Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件
Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件 插件是由PolyWorks加载的动态链接库(DLL文件),然后查询Polyworks模块,以确定它们具有哪些功能,提供给 ...
- Linux进程线程学习笔记:运行新程序
Linux进程线程学习笔记:运行新程序 周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下文并接着运行父进程中的代码,如果我们使新进程不运行原父进程的代码,转而运行另外一 ...
- PHP学习笔记01: 安装PHP开发套件xampp
PHP学习笔记01: 安装PHP开发套件xampp 1.从网上下载xampp7.3.7 2.安装xampp
- Vue 新手学习笔记:vue-element-admin 之入门开发教程(v4.0.0 之前)
说实话都是逼出来的,对于前端没干过ES6都不会的人,vue视频也就看了基础的一些 但没办法,接下来做微服务架构,前端就用 vue,这块你负责....说多了都是泪,脚手架框架布了都没看过 干就完事,不过 ...
- 【FastDDS学习笔记】HelloWorld示例程序编译和运行
目录 第一章:[FastDDS学习笔记]Ubuntu22上安装fastDDS环境 第二章:[FastDDS学习笔记]HelloWorld示例程序编译和运行 第三章:[FastDDS学习笔记]Fast- ...
最新文章
- linux--memcache的安装和使用(转)
- 因为失误导致数据丢失
- 清华大学计算机学科顾问委员会第三次会议举行
- 面试:知道 CopyOnWriteArrayList 吗?
- 玩转JavaScript正则表达式
- 计算收益复利的小例子
- 我妈在深圳的这些日子
- golang:Linux下安装go环境
- LeetCode——75. 颜色分类(面试题)
- 逻辑英语语法电子版_11920671英语逻辑语法上.pdf
- 豆瓣读书isbn 查询
- 如何做IT项目PoC测试
- C++: 猴子选大王
- RFID技术给图书馆带来的优势
- inital,inherit,unset
- 苹果电脑销量大跌40%,PC市场无战事
- 数据挖掘:实用案例分析 下载_实用!变频器选型误区 选型方法 案例分析 ?...
- 实例006 使用正则表达式验证两位小数
- Vue生命周期及特征
- Read timed out
热门文章
- 计算机的毕设课题,计算机毕设课题大全.pdf
- #C语言或C++中强大的图形库——easyx
- Hilbert变换简要剖析
- c lua mysql 扩展_lua安装及luarocks安装mysql扩展
- android 互传文件,堪比隔空投送!iPhone和安卓、PC互传文件的3种方法,建议收藏...
- 常用win10优化工具(后续继续更新)
- WinCE驱动之Touch Panel(开发详解)
- USB SERVER网络远程管理U盾
- 激光通信的优点与缺点
- 时频分析matlab实例,Matlab时频分析工具箱及仿真案例