上一页 1 ··· 5 6 7 8 9 10 11 12 下一页
摘要: 在标准的Dispose模式中(见前一篇博客“C#中标准Dispose模式的实现”),提到了需要及时释放资源,却并没有进一步细说让引用等于null是否有必要。有一些人认为等于null可以帮助垃圾回收机制早点发现并标识对象是垃圾。其他人则认为这没有任何帮助。是否赋值为null的问题首先在方法的内部被人提起。现在,为了更好的阐述提出的问题,我们来撰写一个Winform窗体应用程序。如下:privatevoid button1_Click(object sender, EventArgs e){Method1();Method2();}privatevoid button2_Click(object 阅读全文
posted @ 2012-08-07 11:39 怡馨 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 要选择正确的集合,我们首先要了解一些数据结构的知识。所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合。结合下图,我们看一下对集合的分类。集合分类在上图中,可以看到,集合总体上分为线性集合和非线性集合。线性集合指元素具有唯一的前驱和后驱的数据结构类型。非线性集合是指具有多个前驱或后驱的数据结构类型,如:树、图。在FCL中,非线性集合实现的比较少,所以我们将会更多的讨论线性集合。注意:由于类型安全、转型效率等方面的原因,本建议将只讨论泛型集合。线性集合按存储方式,又分为直接存储和顺序存储。所谓直接存储是指:该类型的集合数据元素可以直接通过下标(也即index)来访问,在C#中有三种 阅读全文
posted @ 2012-08-07 11:38 怡馨 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 需要明确一下C#程序(或者说.NET)中的资源。简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类:托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象;非托管资源:不受CLR管理的对象,windows内核对象,如文件、数据库连接、套接字、COM对象等;毫无例外地,如果我们的类型使用到了非托管资源,或者需要显式释放的托管资源,那么,就需要让类型继承接口IDisposable。这相当于是告诉调用者,该类型是需要显式释放资源的,你需要调用我的Dispose方法。不过,这一切并不这么简单,一个标准的继承了IDisposable接口的类型应该像下面这样去实现。这种实现我们称 阅读全文
posted @ 2012-08-07 11:38 怡馨 阅读(157) 评论(0) 推荐(0) 编辑
摘要: dynamic是FrameWork4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性。比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错:dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dynamicObject.Name); Console.WriteLine(dynamicObject.SampleMethod());说到正确用法,那么首先应该指出 阅读全文
posted @ 2012-08-07 11:37 怡馨 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 好吧,我承认,这是一个反标题,实际的情况是:我找不到一个非用ICloneable不可的理由。事实上,接口ICloneable还会带来误解,因为它只有一个Clone方法。我们都知道,对象的拷贝分为:浅拷贝和深拷贝。ICloneable仅有一个Clone方法使我们无法从命名的角度去区分到底是哪个拷贝。浅拷贝:将对象的字段复制到副本(新的对象)中,同时将字段的值也赋值过去,但是引用类型字段只复制引用,而不是引用类型本身。这意味着,源对象引用类型字段的值改变了,会影响到副本中对应的值也改变;深拷贝:将对象的字段复制到副本(新的对象)中,无论是值类型还是引用类型字段,都会复制类型本身及类型的值。这意味着 阅读全文
posted @ 2012-08-07 11:36 怡馨 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 很多时候,在winform的设计下,会遇到新建窗体时不需要用到默认的关闭按钮的情况,而是用另外设置关闭 button或其他控件来控制窗体的关闭。 之前我遇到这个问题时,问了很多朋友,都没找到方法,VS的窗体属性里也没那一项,在MSDN里也没有相关的资料。 但后来偶然发现,原来办法是很简单的,只需要在初始化窗体的时候不显示那关闭按钮就可以了。 具体方法是,加上一句“ this.ControlBox = false;”。 如下: public Form1() { InitializeComponent(); this.ControlBox = false; // 设置不出现关闭按钮 } 而对最大最 阅读全文
posted @ 2012-08-06 08:51 怡馨 阅读(896) 评论(1) 推荐(0) 编辑
摘要: 很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个exe,点击直接运行呢?就像很多安全控件,如支付宝的aliedit.exe那样。 现在介绍一种使用资源文件,将dll、ocx打包进exe,点击直接注册的例子: 首先,新建一个工程RegisterFile。 新建文件夹Resource,里面添加需要注册的ocx或dll。这里我添加的是dsoframer.ocx,并将其文件“属性”中“生成操作”项的值改为“嵌入的资源”。 接下来,创建类Register.cs 里面只有一个函数RegisterDll()。这里为省事,我把它放到了P 阅读全文
posted @ 2012-07-17 09:36 怡馨 阅读(1247) 评论(0) 推荐(0) 编辑
摘要: C#工程经常会引用多个DLL文件,形成一个完整的工程项目的目的。这样的工程在发布时,需要将编译形成的EXE文件与DLL文件共同发布。如果感觉麻烦,可以将这些DLL文件与EXE文件合并,最终形成一个更大的EXE文件,然后只发布这个EXE文件就可以。这个工具就是ilMerge,可以到http://research.microsoft.com/~mbarnett/ILMerge.aspx下载。 下载安装完毕后,设安装在c:\ilMerge目录下,只有一个有用的文件,ilMerger.exe,对于需要装配到一起的文件,我的意见是将当时工程中形成的EXE文件和引用的DLL文件都拷贝到ilMerger目录 阅读全文
posted @ 2012-07-17 09:31 怡馨 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 这篇文章可以帮助你熟悉于用C#开发与RS232的通讯。难易程度 1、2、3本文相关代码下载:NetSerialComm.exe (89KB)http://download.microsoft.com/download/8/3/f/83f69587-47f1-48e2-86a6-aab14f01f1fe/NetSerialComm.exe导引:在.NET环境下编写与RS252串口通信的应用程序的唯一方法,就是引用过时了的并且有点限制的MSComm ActiveX控件。这篇文章介绍了用C#安全代码编写一个多线程的,且时尚的与RS232通讯的基础类库。这个类库使用平台调用服务(即Platform I 阅读全文
posted @ 2012-07-14 09:51 怡馨 阅读(429) 评论(0) 推荐(0) 编辑
摘要: 摘要:本文详细介绍了MSComm控件在串口编程中使用。 目 次MSComm控件两种处理通讯的方式CommPort属性RThreshold 属性CTSHolding 属性SThreshold 属性CDHolding 属性DSRHolding 属性Settings 属性InputLen 属性EOFEnable 属性Handshake 常数OnComm 常数InputMode 常数错误消息 MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。Mic 阅读全文
posted @ 2012-07-14 09:37 怡馨 阅读(739) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 下一页