C#.1

就我们上一篇文章不是说了 C++是按文件编译的 那为什么C#就没有文件的概念了也没有头文件和源文件的概念

只有.cs呢?

可以理解为头文件 源文件都在.cs中

需要引用的类和函数一定要放在自己的前面的这种设定本来就是低内存时代的产物,在现在牛逼的机器上面只有坏处没有好处。

 

“和分配内存无关。

这么设计只是为了防呆。和C/C++不同,C#在语法上有很多防呆的设计。

这就好比USB反过来插不进去,不是因为它的金属端口不匹配——你把那个东西破坏了可以插进去,但是会烧坏电脑。

一样的道理,你定义一个变量而不初始化,C允许你这么做,但是这会导致程序出现潜在的bug。

C#的设计者干脆让编译器限制你这么写。”

 

“作为一个程序员,你应该为编译器的防呆设计而感到愉悦。

就像我说了,一个插头的几何外形被故意设计成反向无法插入,你不会抱怨这种设计的不灵活性,而是会感谢正是这样的设计的存在,使得你不用看说明书,不用判别插头每个管脚、连线的作用就可以放心地使用,不用担心会出什么状况。

一样的道理,使用变量就应该先初始化。而不是总想着省那么几个字母而给程序带来隐患。 ”

 

“我可以举出很多C#的防呆设计,比如在C++中
if (i == 10)
经常会被误写成
if (i = 10)
尽管这个表达式可以通过编译,但是绝大部分情况下这都不是程序员的本意。

更有甚者
int * p = &i;
if (p = NULL)
{
    ...
}
这个倒霉的表达式会将p置为野指针,从而导致很严重的问题。

在C#中,if (i = 10)是不允许的。
这丝毫不会影响真正想这么写的程序员。
他完全可以写
i = 10;
if (i <> 0) ...


类似的switch ... case分支中,忘记写break导致的分支穿透也是造成bug的原因。

C#不允许非空的case分支不加break。

对于指针,C#更是不允许使用——除非你用unsafe显式地表明你需要用它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值