DataTime

  • 最常用格式为:

yyyy-MM-dd HH:mm:ss

  • 实践中,使用前导0的格式,可以很方便地直接比较时间的大小。
var dt1 = DataTime.Now;
Console.WriteLine(dt1.ToString("yyyy-MM-dd HH:mm:ss")); // 重载ToString(),改变输出格式
Console.WriteLine(dt1.ToString("yyMMdd HH:mm:ss")); // 重载ToString(),改变输出格式

var str1 = dt1.ToString("HH:mm:ss");
Thread.Sleep(1000);
var dt2 = DataTime.Now;
var str2 = dt2.ToString("HH:mm:ss");
// 统一时间格式,有前导0
Debug.Assert(string.Compare(str1, str2) < 0);
  • 也可使用Parse(str)进行解析。
var str = "14-2-3 1:1:1";
var dt = DataTime.Parse(str);

断言Debug.Assert(bool);

  • 如果输入false则报错;
  • 否则程序正常运行。

internal关键字

  • 访问修饰符internal
  • 实践中用于dll修饰

示例:新建一个类库ClassLibrary,之后进行如下操作。(VS中类库是默认把文件属性调成类库,并自动生成一个dll;在引用中引用该类库/dll即可)

namespace ClassLibrary{

	internal class Class2{}
	// 该类只能在本类库中使用

	public class Class3{}

	public class Class1{
		internal Class3 C = new Class3();
		// 外部可以访问Class1和Class3,但是不能访问包Class1.C。因为C是internal的。
	}
}

GUID

  • 全局唯一标识符;
  • GUID是一堆随机字符串;
  • 广泛用于注册表、类标志,不可重复。
Console.WriteLine(Guid.NewGuid().ToString("D")); // 生成标识符

访问Excel

  • COM组建
  • OleDbConnection
  • 引用其他DLL,比如NPOI

OleDbConnection较为常用,与数据库联用。

NPOI为国人写的类库。

一般使用别人写好的轮子,稍微修改便可以。

正则表达式

  • 经典需求案例,判断一个字符串是不是有效的邮箱。如下。
using System.Text.RegularExpression;

...;

static bool IsValidEmail(string strIn){
	return Regex.IsMatch(
		strIn, @"^([\w-\.]+)@((\[0-9]{1,3}\.[0-9]{1,3}\.)" + 
		@"|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?$");
}

static void Main(string[] args){
	if(IsValidEmail("abc")){
		Console.WriteLine("是");
	}else{
		Console.WriteLine("否");
	}
}
  • 正则表达式以^开头,以$结尾。
  • 一般经典的字符都被写好。
  • Regex.Split()、Regex.Replace(),根据正则去切割、去替换。

访问剪切板

控制台程序没法使用System.Windows.Form。CLipboard.SetText(“xxx”)在输出类型为Windows应用程序项目中。

设计模式

2015年是C#主要有23种设计模式,还有一个GRASP。在之前的笔记中,介绍过4种:

  1. 单例模式
  2. 简单工厂模式
  3. 观察者模式
  4. 迭代器模式

GRASP职责分配原则。是最为基本的模式,描述了对象设计和职责分配的基本原则。

参数化配置(避免硬编码)

常用反射配置文件、数据库,因为CS(client-server客户端)项目重新部署很麻烦。

其他介绍

  • 《敏捷软件开发原则、模式与实践》,类的设计原则、UML、设计模式、包的设计原则,理论与实践兼具。
  • 版本控制,两个操作,签入和签出。
  1. 签出check out:签出以后,文件只能签出者访问;
  2. 签入check in:签出者修改完以后,签入,大家获取新的修改好的文件。