用形象的比喻学编程

为什么C#指针不安全: 

           比喻:假设你是一个杀手,上级要你去枪毙一个人,C#的引用的方法是:找到人,姓名,地址,性别都对头后开枪,而C++的指针则是按照身份证号码,正常情况下,按照身份证号码的方法很快很方便,可是万一目标的身份证被别人

拿去了那么你将杀错了一个好人啊!

 

什么是动态链接库:

         比喻:我们把Windows比做一个游乐场,而把在游乐场里玩儿的小孩比做一个一个程序。小 孩在玩的过程中可能要喝水。我们有两个办法让小家伙们想喝水的时候就有水喝:1.给每个小家伙配一个水壶,小家伙们喝了的话就喝 自己带的水;2.给游乐场配一个饮水机,谁渴了谁来喝。显然,第二个方法要好得多,这体现在三个地方。 第一 ,带着水壶,小家伙身体不灵活、玩不爽(影响程序的速度),况且这只是带了一个水壶,要是再带上饭盒呢?还有轮滑、头盔、创可贴 、纱布……AK-47 My God,如果带全了就赶上美国大兵了。所以游乐园里还是有个公用“仓库”要来的方便,让大家随用随取(动态链接)。第二 ,小家伙们带了那么多东西,占了游乐场很多地方,让游乐场拥挤不堪,别的小朋友就进不来了(程序体积大,影响程序和系统的性能) 。第三,如果某件物品升级了,比如水壶从一升的改为二升的,那么每个小家伙就必须go home去换新的(重新编译程序,由编译器把新的静态库链接进程序主体里),而第二种情况里,只要游乐场把自己仓库里的水壶换个 型号,那么所有小家伙就都在同一时间拥有了大容量的水壶。(悟空!我就一会儿不在,你怎么就乱丢东西?!打到小朋友多不好~~~ ~~)
         悟空已经急了,我就不再叽叽歪歪了……呃……Win32 API函数是放在Windows系统的核心库文件中的,这些库在硬盘里的存储形式是.dll文件。我们常用到的dll文件是user32.dll和kernel32.dll两个文件,还有其它一些dll文件也非常重要,大家要在实践中多积累经验。

 

为什么要使用匿名方法:

    比喻:有时候程序员最头疼的就是给方法去名字了,就像。。。。。。一个鸡蛋,一生出来马上就要吃掉,何必再为这个蛋起个名字呢?总的来说,就是一次性使用的物品,实例化以后就只需要用他一次就够了,在程序里不会再使用,就用匿名类,使程序简洁

ref和out的区别:

    比喻:rel是有进有出,out是只出不进。经典!这就是他们两最大的区别,由于ref有进有出所以得有初始值。

 

句柄和指针:

  比喻:handle的本意是把柄,把手的意思。是你与操作系统打交道的东东。举个通俗的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。
    但你不能到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄指针调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成是系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员符给的。 

 

“指针”与“指针变量"

  比喻:指针就是地址,准确描述目标所在的位置。
指针变量就是写了地址的纸条;
可以改写纸条,也可以把一个地址写到不同的纸条上传递给别人。

 

StringBuffer与 StringBuilder 有什么区别?
   比喻:多个线程,同时向一个对象进行操作时,StringBuffer就是安全的,不会出现内部的混乱,而StringBuilder则不是,可能产生数据混乱。
许多人吃完饭了,去盛一碗汤。
盛汤有几个步骤
1 把碗放在桌子上
2 拿起汤勺盛汤
3 把汤倒倒入碗里
最典型的冲突就是
1 你拿了一个小碗(属性值比较较小,比如size=3)
2 你去盛汤
3 另一个也拿了一个大碗(比如size=8),因为一个类只有一个属性,所以你的碗被人替换掉了
4 你盛的汤倒入的,已经不再是你期望的那个碗了,当然倒入碗里后的结果也是不对的(不满或者溢出了)
区分"面向连接服务"和"无连接服务"的概念
  比喻:区分特别简单、形象的例子是:打电话和写信。两个人如果要通电话,必须先建立连接--拨号,等待应答后才能相互传递信息,最后还要释放连接--挂 电话。写信就没有那么复杂了,地址姓名填好以后直接往邮筒一扔,收信人就能收到。TCP/IP协议在网络层是无连接的(数据包只管往网上发,如何传输和到达以及是否到达由网络设备来管理)。而"端口",是传输层的内容,是面向连接的。协议里面低于1024的端口都有确切的定义,它们对应着因特网上常见的一些服务

线程和进程:
   比喻:进程好比一个工作小组,线程好比一个人; 进程刚建立时,只有一个人工作; 如果一个人够了,那就不需要加人了;
如果一个人不够,就再加一个人,就是说有两个线程了; 这两个人同时在做不同的事情; 如果人手还不够,还可以加人; 如果其中一个人把他自己的工作做好了,那他就退出了; 就是说一个线程结束了,但是还有其他线程工作;
当最后一个人做好了,这时整个进程就结束了。
 
 
 API:应用程序接口、 SDK:软件开发包 、DLL:动态连接库三者关系

    比喻:你想吃饭,可以自己做饭吃,也可以去KFC、麦记或其他快餐店...因为你知道这些快餐店吃东西最方便...它们就是DLL...提供某种功能实现并且不需要你了解细节...你只管大爷一样走进去给钱点餐吃饱抹嘴走人...

但现在你想开一家快餐店...你就必须了解开快餐店要做什么...工商税务卫生装修厨师等等...需要满足一系列标准才能开店...这些标准就是API...由管理部门制订...你要提供某种功能实现必须遵守的...

最后你决定开一家KFC...那你就要按照KFC的规定流程加盟...交钱、选址、签合约、装修、培训员工...这一套流程就是KFC的SDK...它帮助你快速实现你要做的事...
 
 硬盘、内存、CPU的关系:

     比喻:硬盘——就好比家里的冰箱,用来储存肉的,当然,冰箱越大,放的肉就会越多。

内存——相当于砧板,要想切肉得把肉从冰箱里拿出来,放在砧板上才能切

CPU——刀,切肉要用什么呢?用刀啊

硬盘、内存、CPU之间的关系呢,就是冰箱、砧板、刀的关系,冰箱(硬盘)越大,储存的肉(数据)就越多,有砧板(内存)和刀(CPU)才能切肉(处理数据)。如果砧板(内存)不够大,刀(CPU)的功能再强也没有用武之地,反过来是同样的道理,砧板(内存)再大,刀(CPU)的处理能力差也是不行的。。。

待续。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值