System.Diagnostics.Debug一组奇怪的重载函数WriteLine

昨天想当然System.Diagnostics.Debug.WriteLine函数与System.Console.WriteLine函数具有相同的函数定义,所以来了类似这么一句:
string name = “Noock”;
System.Diagnostics.Debug.WriteLine("[{0}]Hello from:" + name, DateTime.Now.ToString("yyyy-MM-dd"));
但得到的结果确令人不解:
2010-12-19: [{0}]Hello from:Noock

开始以为是BUG,结果看了System.Diagnostics.Debug.WriteLine一组函数定义才明白问题之所在,这组函数有:
1:public static void WriteLine(object value);
2:public static void WriteLine(string message);
3:public static void WriteLine(object value, string category);
4:public static void WriteLine(string format, params object[] args);
原因就清楚了,本以为调用的是第4个函数,而实际上调用的是第3个函数,所以所category的值放到了最前面,而把第一个参数作为value(即字符串)直接输出。而看看Console.WriteLine一组函数定义中有下面两个函数:
5:public static void WriteLine(string format, object arg0);
6:public static void WriteLine(string format, params object[] arg);
原以为Debug中的函数3与会为函数5,实则不然。可能微软在设计这个函数时也是考虑到调试方便,加了一个category参数,用于对消息进行分类,但设计的不一致难免会带来一些问题,而我最开始要写的那句还不得已使用拆成在个参数。

可能这也是见仁见智的问题,但我认为使用函数3并不一定会给编程带来什么效率上的提高,反而会使得习惯了Console.WriteLine的用户犯一次错误,而且这个错误还不一定只会犯一次(如果哪位遇到过同样的问题,回个帖声援一下吧)。

 

昨天发现的问题,今天用着感觉特别别扭,总得考虑两个参数与三个参数时的不同。

 

所以,在设计任何系统时都应该考虑设计的一致性,除非特别必要(我认为Debug.WriteLine此处没有必要),千万不要违反一致性原则而违背用户的使用习惯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值