《C#类设计手册》读书随笔

原创 2004年09月14日 13:02:00
应该说是对了解一些基本概念十分好的书,虽然编写了这么长时间的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#类设计手册》基础知识要点

应该说是对了解一些基本概念十分好的书,虽然编写了这么长时间的C#程序,但翻了两天,也感觉有些东西可以吸取的。(权当这里作为读书笔记的摘要 ^_^) 几个缩写术语: CTS  Common Type ...
  • mss359681091
  • mss359681091
  • 2016年06月28日 09:23
  • 998

《战略管理》第一章<什么是战略管理>读书笔记

一、什么是战略        战略:设计用来开发核心竞争力、获取竞争优势的一系列的综合的、协调的约定和行动。        战略管理过程:一家公司想要获取战略竞争力和超额利润而采用的一整套约定、决...
  • charleslei
  • charleslei
  • 2015年06月03日 22:13
  • 713

【随笔】近来的学习C#的感受和观点

好久有真正的静下心来写文章了,但心里总有那么点话,想要说出来,今天为止C#的学习基本上也算是告一段落了。经过差不多半年的学习,我觉得我对程序有了个全新的认识,就是其实他不像你想象中的那么难。其实程序员...
  • laioyun654
  • laioyun654
  • 2011年05月30日 21:08
  • 193

【读书笔记】卧底经济学

第一章 你喝咖啡,谁赚钱 星巴克为什么风靡?是他的服务很好,口味很佳,事实这两项都不是,真正的原因和房价一样,那就是位置,位置,位置!为了那个位置他们会和房东签排他协议,否则绝不入驻。那些昂贵的位置...
  • hellokangning
  • hellokangning
  • 2013年12月18日 22:28
  • 1468

寒假读书计划!

读书计划:时间:2007年1月22日-------2007年3月28日。总共38天,每天需要花费4个小时。共152个小时。方式:在读书过程中切记一定好做好笔记,哪一章的重点话语和代码示例。做成Word...
  • hong1
  • hong1
  • 2007年01月18日 13:16
  • 1742

读书随笔

最近读了几本不是技术的书,一本是写
  • studyhadoop31
  • studyhadoop31
  • 2014年09月21日 16:47
  • 629

超越css Web设计精髓 读书体会

超越css Web设计精髓 读后感: 内容提要:本书系统深入地阐释了网站的设计与实现,帮助读者从设计的角度使用css以达到完美的效果,作者通过使用标记和css的形象的创造性示例,帮助读者掌握实现创意设...
  • M_xiaoxiao
  • M_xiaoxiao
  • 2010年03月02日 16:24
  • 248

2015年读书清单-技术篇

记得2015年元旦那天,我说我希望我2015年一年可以读75本书,今天在豆瓣里面统计了一下,发现自己2015年一年总共读了62本书,距离自己的目标还差13本,主要原因应该是七月份之后一直在公司实习以及...
  • qizekai
  • qizekai
  • 2016年03月02日 14:26
  • 217

Star Schema完全参考手册读书笔记一

分析型数据库与维度设计 本章主要讲述星型模式中的一些基本概念,例如:事实和维度, 维度表和事实表,键与历史,星型模式等,具体见文章内容。...
  • u012073449
  • u012073449
  • 2015年10月02日 19:43
  • 352

读《用户体验草图设计 工具手册》

随身带绘图本和铅笔 善用数码相机 本书就要介绍有助于设计的工具, 手边的,办公室内有的,数码化的,数码相机,摄像机等等 白纸比数码的更有具于多人一起进行讨论设计。 推荐 2 星 不过能把这么简...
  • wide288
  • wide288
  • 2016年07月31日 20:54
  • 396
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《C#类设计手册》读书随笔
举报原因:
原因补充:

(最多只允许输入30个字)