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种:
- 单例模式
- 简单工厂模式
- 观察者模式
- 迭代器模式
GRASP职责分配原则。是最为基本的模式,描述了对象设计和职责分配的基本原则。
参数化配置(避免硬编码)
常用反射配置文件、数据库,因为CS(client-server客户端)项目重新部署很麻烦。
其他介绍
- 《敏捷软件开发原则、模式与实践》,类的设计原则、UML、设计模式、包的设计原则,理论与实践兼具。
- 版本控制,两个操作,签入和签出。
- 签出check out:签出以后,文件只能签出者访问;
- 签入check in:签出者修改完以后,签入,大家获取新的修改好的文件。