应该说是对了解一些基本概念十分好的书,虽然编写了这么长时间的C#程序,但翻了两天,也感觉有些东西可以吸取的。(权当这里作为读书笔记的摘要 ^_^)

几个缩写术语:
CTS Common Type System 通用类型系统
CLS Common Language Specification 公共语言规范
CLR Common Language Runtime 公共语言运行时
MSIL Microsoft 中间语言
GAC Global Assembly Cache 全局程序集缓存

Stack 栈 值类型使用
托管堆 类似C的堆,但不考虑释放,因此叫“托管”,Managed
空间比栈大得多,但访问速度慢

.NET环境下,任何类型无论是值还是引用类型,都是对象 System.Object
.NET有3种值类型:基本类型,用户定义的值类型,struct和枚举类型

C#将string和object也列为基本类型,尽管它们都是引用类型
枚举(位标记) System.Enum 实现了IFormattable
引用类型:类类型,委托(指向方法的类型,安全指针),数组,字符串

在C#中没有全局变量和全局函数

委托的3个必须步骤:
1. 声明委托;
2. 创建委托对象,把它绑定到特定方法上;
3. 使用委托对象,调用这个方法

《C#字符串和正则表达式参考手册》对字符串处理说的比较深入,有时间值得一看。

装箱和取消装箱
装箱的对象包含值对象中的数据副本,如果装箱的对象修改了,不会影响原来的值对象。

常量,编译时确定的,在DLL中改变了需要重新编译调用了该DLL的对应程序集。

静态只读变量,运行期间确定其值
数据库连接信息等应放在配置文件中,面向部署


Equals() .NET定义了两种形式的等价:引用等价,值等价
默认情况下,System.Object.Equals() 测试引用等价,但可以Override使其测试值等价。

System.Diagnostics中的StackFrame和StackTrace访问栈框架和栈跟踪。

方法类型:实例方法和静态方法。

ref 按引用传递,方法声明和调用同时使用ref关键字。

输出参数,与ref相似 out也是按引用传递

params 关键字 参数数组必须是方法声明中的最后一个参数,大量的字符串操作应使用
System.Text.StringBuilder

Try ... Catch ... Finally

属性和运算符
JIT编译器可以使属性的访问比字段的访问更快
属性是快速访问对象状态的一种技术。

静态属性

索引器
容器类,父子关系中的父,一对多关系
使用ArrayList代替数组增强功能

“运算符” 特殊的方法

构造函数和对象生命周期
销毁对象
把对象引用设置为null,并注意不再有对对象的其他引用,就可以显示销毁对象。

应用程序中的大量析构函数会对性能有负面的影响,处理对象销毁,首选方式利用
IDisposable接口,实现Dispose方法,以Finalize析构函数方法来执行,但不会中断垃圾回收
过程。

私有构造函数
静态构造函数

IClonable Clone 深拷贝 MemberWiseColone 浅拷贝

串行化和并行化
将对象串行化保存下来,这种技术广泛应用于恢复应用程序的状态,定期获取屏幕快照,保存对象等。

.NET Framework提供了丰富的XML串行化模型
xsd.exe 推断XML模式,XML架构/数据类型支持实用工具


事件和委托
基于事件的编程是.NET Framework的基石
.NET Framework中的事件机制使用了委托(回调)
事件作为一种常用的方法来解除事件源对象(生成事件的对象)与事件接收器对象(接受事件通知的对象)之间的耦合。

委托 类似于应用程序中指向对象中方法的指针
3个步骤:
1 声明委托类型
2 创建委托对象,并将该对象绑定指定方法上
3 使用委托对象来调用方法

.NET Framework支持两种类型的委托
单播委托:允许一个对象上调用一个方法
多播委托:允许在不同对象上调用一系列方法,维护一个调用对象

使用多播委托的步骤:
1 定义一个委托类型
2 编写具有相同签名方法作为委托
3 创建委托对象,将它绑定到需要通过委托调用的第一个方法
4 创建另一个委托对象,绑定到下一个需要调用的方法
5 System.Delegate类的Combine方法,合并成一个集成的多播委托

异步委托 可以在后台线程中调用的方法
调用委托实例三种方式:
1 同步调用,等待方法执行完毕,最常见
2 异步调用,等待方法执行完毕, EndInvoke(),但在方法执行完毕之前调用
3 异步调用,注册一个回调方法,一旦执行完毕,给出通知

事件的实现 使用委托存储订阅的事件处理方法,典型的Observer设计模式的一种实现
每个事件,必须指定下面两项内容:事件名,事件的签名(参数列表)

System.EventHandler 一个内置的委托
事件不能有返回类型,只能从事件源对象到事件接收方对象的单向信息流

静态事件 较少见,相对于一般事件

定义自己注册的方法
大多数情况下不需要定义定制的注册方法,但这种技术可以使代码最简洁和快速。
Framework中,大多数控件都使用定制的注册方法。

基类和子类不能引用同一个委托
继承和多态性 所有的面向对象语言都支持,多态性由继承支持,把一种类型的对象视作另一种类型的实例的多态性

基类定义为virtual,派生类就可以重写基类的操作
标记为非虚的方法不能重写
操作声明为virtual,可以重写该实现
操作声明为abstract,必须重写该实现

类 继承自System.Object
结构 继承自System.ValueType,继承自System.Object转换成它实现的接口类型,对于引用类型代替类型要小心,不能调用接口不支持的任何对象。


代码组织和元数据

共享程序集 全局程序集缓存 Global Assembly Cache (GAC)

程序集 可重用的最小单元

元数据 为公共语言运行时提供了在运行期间加载类型和调用方法所需的所有信息
metadata 是元编程的基础,在很多系统中也是根本的东西,了解这个东西可以比较深入的了解某个架构

查看元数据最简单方法使用ildasm.exe /adv或/advancel选项

.NET模块是一个可移植、可执行(PE)格式文件

只有数据的模块 SDK包含一个工具Assembly Linker(AL.exe)
利用该工具将这些非MISL模块链接到程序集中

将该文件编译成模块,必须使用C#.NET命令行编译器
不能使用Visual Studio .NET 因为它总是创建单、程序集
例如:csc /target:module csMod.cs csMod.netmodule
*.netmodule 是.NET的模块
增加模块到程序集清单中:
csc /addmodule: csMod.netmodule /addmodule:VBMod.netmodule MainMod.cs

程序部署
部署单程序集应用程序比较简单,直接用xcopy部署。
私有程序集部署应用程序也不复杂,将需要的程序集合放在同一个文件夹或者用应用程序配置文件通知CLR在什么位置查找程序集

部署共享程序集
添加到GAC 全局程序集缓存
但Microsoft不推荐应用程序与GAC相互依赖,应尽量使用应用私有程序集部署方式

利用公有-私有密钥对可以为程序集创建强名称
编译期间编译器使用私钥,将相应的公钥写入程序集清单
sn (Strong Name) sn \k *.snk
MSDN中查找"Keys crytography"查找相应内容
publickey 较长的数字
public key token 公钥令牌
sn \t *.snk

将共享程序集安装到GAC中
gacutil -i *.dll 需要管理员权限
或者在控制面板的管理工具中找 .NET FrameWork Configuration

1. Windows Forms几个平时没有留意的常用的属性:
AcceptButton:设置在表单击活状态下,按ENTER键对应反应的是那个按钮的函数。缺省值 None
CancelButton:设置在表单击活状态下,按ESC键对应反应的是那个按钮的函数。缺省值 None

2. Form在表单方法Show被调用时,事件和方法触发的顺序:
Load -> GotFocus -> Activated -> Closing -> Closed -> Deactivate -> LostFocus -> Dispose
Show方法隐含调用Load,因此如果一个表单即使没有载入,如果调用Show方法也会直接将表单载入。

3. 当你需要在表单显示或者隐藏时运行某些代码,放在Activated和Deactivate比GotFocus和LostFocus事件中好。

4. 收到close的请求,表单先运行Closing事件中代码,再Closed代码,因此数据有效校验放在Closing中为好。

5. Hide方法,即使没有表单没有Load到内存中,当调用Hide时候也会将表单Load到内存中,但不显示。

《C#类设计手册》读书随笔相关推荐

  1. 读【36岁IT老人再次随笔】的读后感,你会哪些计算机语言?

    论坛首页一篇:社区"揭穿最大谎言"事件 , 我看了,也顺便看了里面另一位仁兄的[36岁IT老人再次随笔] 其中关键的地方就是一个例子:你会哪些计算机语言? 这个问题很有意思,确实如 ...

  2. 岁月无情,人生易老———36岁的我何去何从

    自己已经36岁了,突然间害怕了.经常听说"时间是把杀猪刀",现在切实感受到了. 过去读朱自清的<匆匆>,语言很好,也挺有感觉的.但现在却想逃避,不愿意去读一个字. 过去 ...

  3. 感叹人生!程序员哭诉:36岁被裁员,存款仅余80万!我能过几天?

    记得5年前左右的时候,IT这块刚好处于最火专业之一!至今为止,依旧很多人选择计算机!由于女生也很多选择这块,所以给很多公司带来了福利啊!以前一个互联网公司女生少的可怜啊!可随着IT这块人员的进入,竞争 ...

  4. 一位36岁女教师关于教职、学术、幸福及正确道路的思考

    娜拉,是易卜生话剧<玩偶之家>中的主人公,她最有名的事迹就是"出走"--离开了她那伪善的家.剧中,大门嘎吱一声,高潮处即落幕.可现实中的"出走"不是 ...

  5. 36岁女博士找教职之路,真的懵了....

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文授权转载自李晓姣科学网博客 作者:李晓姣.如需转载请联系原作者授 ...

  6. 培训班里的36岁女青年

    在广州某培训机构的办学史上,李盼是第一位年龄超过35岁的女学员. 我叫李盼,是一名混迹在广东的大龄女青年.说起来,我的故事或许平淡无奇,或许曲折离奇. 32年前,我出生在华南一个偏僻的乡村. 那时的农 ...

  7. 少儿python用幼儿书籍_小朋友的书 篇一:一岁半小朋友图书大总结(中文系列)...

    小朋友的书 篇一:一岁半小朋友图书大总结(中文系列) 2016-08-09 14:30:00 19点赞 167收藏 18评论 由于妈妈是个爱买书的人(其实不光书什么都爱买),所以小朋友不到一岁半已经有 ...

  8. 36 岁未婚大龄女,不找对象偏偏要学编程 | 程序员有话说

    作者 | 素年清时 责编 | 伍杏玲 [程序人生 编者按]在广州某培训机构的办学史上,李盼是第一位年龄超过35岁的女学员. 我叫李盼,是一名混迹在广东的大龄女青年.说起来,我的故事或许平淡无奇,或许曲 ...

  9. 曾遭周鸿祎全网封杀的 360 猛将 :草根打工到 36 岁身家上亿的逆袭!

    作者 | 云游小生 来源 | 纯洁的微笑(ID:keeppuresmile) 猎豹六周年,傅盛在内部演讲: "有部电视剧叫<奋斗>,名字很好,帅哥靓女,青春励志. 但看了开头,我 ...

  10. 曾遭周鸿祎全网封杀的360猛将 :草根打工到36岁身家上亿的逆袭!

    作者 | 云游小生,来源 | 纯洁的微笑 00 猎豹六周年,傅盛在内部演讲: "有部电视剧叫<奋斗>,名字很好,帅哥靓女,青春励志. 但看了开头,我就看不下去了.作为一个奋斗者, ...

最新文章

  1. Android setOnPageChangeListener 过时了怎么办?
  2. 这款 网络排查 神器,运维用了都说好,赶紧收藏~
  3. Ubuntu上snmp安装、配置、启动及远程测试完整过程
  4. springboot基本属性注入
  5. linux 目录权限及归属,Linux中如何设置目录或文件的归属及权限
  6. C++设计模式详解之装饰者模式解析
  7. php报错处理,关于升级php7后的报错处理
  8. Mybatis 向指定表中批量插入数据
  9. mvc php 分页,MVC+jQuery.Ajax异步实现增删改查和分页_jquery
  10. 用递归的方式处理数组 把递归方法方法定义到数组的原型上 (这是一次脑洞大开的神奇尝试)...
  11. git中clone出来项目,导入到eclipse并运行web项目
  12. Mydumper 多线程备份工具
  13. linux基本命令操作(二)
  14. TCP——TCP报文分析及TCP状态机、非法TCP报文标志组合
  15. [哎]关于ftp扫描工具的破解问题
  16. 增强型MOSFET导通条件
  17. 自学白帽黑客第一年总结
  18. DAOS整体设计分析 (二)
  19. 一章——系统安全及应用(应用——linux防护与群集)
  20. “文件大小”和“占用空间”的区别

热门文章

  1. window10打开电脑没有输入法
  2. Vue学习笔记(十九)——组件props信息的修改
  3. DVB-T RS编码
  4. Hyperchain 超块链创始人史兴国对谈李国权:为什么新加坡能在全球“Web3桥头堡抢夺战”中突出重围?
  5. 贵阳python培训机构
  6. [课业] | 软件安全 | 使用OllyDbg破解TraceMe.exe程序
  7. 小程序源码:2022虎年全新姓氏头像制作多模板-多玩法安装简单
  8. 手机APP测试之环境相关的测试
  9. Golang 类型转换
  10. C# 注册机功能开发,机器码设计