日期:2014-05-20  浏览次数:20981 次

为什么很多人喜欢在C#中用out和ref?
特别是在输出错误信息时,一般来说,不管是否是可预见的错误,毕竟都比正常流程要少的多,弄个ref,out,搞得每次都要传递这个参数,大多数是空的,为何不用抛出异常,我很费解?谁能解释下?
------解决方案--------------------
这是个人习惯,尤其是一起使用ado.net比较多的人

ado.net采用int做返回参数,-1自然表示有误,但错误是啥并没有明说

自然如果喜欢采用这种api规定做设计的人,在处理这套东西的时候,他就比较郁闷,所以他就只好自己在临时弄一个ref

ps:这一般都是临时加上去的,一般ref参数都在末尾是吧,why?因为大多数情况是开始就没考虑到,后来需要了临时加上了。如果你开始想到了,又何必如此呢??

比如ado还有lasterror可以查。如果开始就想到了你也一样可以,事先就在对象里放lasterror属性
------解决方案--------------------
得看看代码的都是什么人。如果像微软那样设计给所有人用的类库,那么就不能假定程序员有对指针、out、ref这样的按引用传递的理解,所以要避免。如果目标是中高级程序员,那么就不需要有这方面的顾虑。
------解决方案--------------------
引用:
传统的c环境最差劲的,就是其调试环境。于是就产生了这类东西,用返回值来表示是否异常。


不管用任何C语言的书入门,C都是这么用的,因为没有别的选择,相反,C程序员会觉得C异常机制极其丑陋,习惯了C的程序员对于任何绕圈子的行为都看不惯,包括C++对一些类型安全上的限制(C程序员会说,unsigned char和char内存上没有任何区别,C++却不能隐式转换char *和unsigned char*,每次都强转根本是脱裤子放屁)

C++的异常机制也是个半残,因为C++的标准库太贫乏了,其中有一半还是继承C的,根本不抛异常

所以不要随便喷别的语言,各种语言都有自己的价值观,在脚本语言看来,C#一样低级,一些脚本语言用户鄙视一切需要编译,或者有“类型”的语言
------解决方案--------------------

只要:

1. 我的接口设计合理,没有增加不必要的耦合;
2. 没有引入不必要的性能损耗;
3. 没有造成安全隐患;
4. 没有破坏程序的整体架构;
5. 没有增加代码阅读和理解的难度;


在这样的前提下,C#编程语言中任何一个合法的关键字都可以为我所用,谁能说这样不可以?

------解决方案--------------------
如果有人说,他这辈子写程序从来不需要在一个函数里返回多个值,那我也没话说;
如果有人说,需要返回多个值的时候他总是封装成一个类,哪怕就两个值也封成一个类,哪怕这多个返回值之间并没有什么直接联系,哪怕这封装的类其实不伦不类,那我也没话说;

编程语言当中哪些关键字要保留,哪些关键字要废弃,这可是大事情,一般都会有专门的技术委员会来商议这件事,而且委员会的成员各个都得是世界级的专家。某些人仅凭自己那点极其有限的编程经验,自己用不到就觉得别人也用不到,这不是一件很可笑的事情吗?

编程是一件顺理成章、水到渠成的事,代码写到那里,需要用到一个什么东西,自然而然就用了,只要不是滥用就行。就像人写文章一样,需要用什么字就用什么字。有的字你可能一辈子也没遇到,但是也许别人还要用,你能不能说既然你自己用不到那么字典里就该把这个字删除?

真不知道某些人的脑子是怎么长的,这么点事都想不明白?