目录
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
#endregion
namespace 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);
缓冲区的大小应大于窗口的大小,窗口尺寸不能大于控制台的最大行数和列数