2012年11月14日
摘要: 最近也研究了下插件编程,网上的例子太少,而且不适合初学者。这里专门做了个简单易懂的例子,供大家学习,程序如有问题还望跟帖予以指教。 程序界面运行如下://==============================================================首先,我们要定义一个插件接口,接口规范了插件内部类的程序结构,应实现的字段,属性,方法,事件。using System; using System.Collections.Generic; using System.Text;namespace IMsg { //这是插件必须要实现的接口,也是主程序与插件通信的唯一接口, 阅读全文
posted @ 2012-11-14 09:01 Q&A 阅读(408) 评论(0) 推荐(0) 编辑
  2012年11月6日
摘要: 18.使用属性代替可访问的数据成员19.运行时常量(readonly)优于编译时常量(const)20.操作符is或as优于强制转型21.使用Conditional特性代替#if条件编译22.总是提供ToString()方法23.明辨值类型和引用类型的使用场合24.将值类型尽可能实现为具有常量性和原子性的类型25.确保0为值类型的有效状态26.理解几个相等判断之间的关系27.理解GetHashCode()方法的缺陷28.优先采用foreach循环语句29.变量初始化器优于赋值语句30.使用静态构造器初始化静态类成员31.利用构造器链32.利用using和try/finally语句来清理资源33 阅读全文
posted @ 2012-11-06 13:27 Q&A 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 1. 使用as,而非isobject o = GetFromCache("A_KEY");EmployeeInfo employee = o as EmployeeInfo;if(employee != null){// TODO: 代码}2. 使用DataReader读取数据using(SqlDataReader reader = SqlHelper.ExecuteReader(cmd)) {while(reader.read()) {// TODO: 读取当前行的数据}}3. 尽量使用强类型集合(包括泛型集合),而非DataTableusing(SqlDataReade 阅读全文
posted @ 2012-11-06 13:26 Q&A 阅读(260) 评论(0) 推荐(0) 编辑
  2012年11月2日
摘要: http://hi.baidu.com/linrao/blog/item/6086dc3918df18d5d4622534.html什么是动态程序集动态程序集是指没有被编译至主程序,而是主程序在运行时动态调用或者生成的程序集。动态链接库(dll)大家一定很熟悉,它是一系列类和方法的打包,可以被不同的执行程序加载和共享,而C#生成的程序集也是dll。在实际应用中,一些程序不一定要在启动的时候就把所有dll文件都加载到内存中,而是根据需要动态加载或者创建。C#的反射和晚期绑定为实现这种操作提供了极大的帮助。本文主要介绍了从动态程序集里怎样创建特定类的对象,以及该对象的序列化和反序列化问题。C#的加 阅读全文
posted @ 2012-11-02 08:55 Q&A 阅读(2083) 评论(1) 推荐(0) 编辑
  2012年10月25日
摘要: http://www.cnblogs.com/wing011203/tag/Effective/ 阅读全文
posted @ 2012-10-25 11:23 Q&A 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 回调用于为服务器和客户端之间提供异步的反馈,其中可能会涉及到多线程或者需要提供一个入口点用于同步更新,在C#中,我们使用委托来表达回调。委托为我们提供了类型安全的回调定义,虽然大多数常见的委托应用都和事件相关,但是那并不是委托应用的全部场合。当类之间有通信的需要,并且我们期望一种比接口更加松耦合的机制时,委托就是最合适的选择。委托允许我们在运行时配置目标,并且可以通知多个对象,委托对象中包含一个方法引用,这个方法可以是静态方法,也可以是实例方法。我们还可以为委托绑定多个方法,利用委托的多播机制,可以一次调用多个方法。但是有两点需要注意:1)如果有委托调用出现异常,那么这种构造将不能保证安全;2 阅读全文
posted @ 2012-10-25 11:22 Q&A 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 接口实现没有多态功能, 以接口调用接口方法,其性质表现为实现接口的类的方法行为。若要让接口实现多态功能,需要用virtual 实现。如下:public interface IA { void Print(); } public class MyClass:IA { public virtual void Print() { Console.WriteLine("MyClass"); } } public class MyDerive : MyClass { public override void Print() { Console.WriteLine("MyDe 阅读全文
posted @ 2012-10-25 10:51 Q&A 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 基类可以用来描述和实现一些具体的相关类型 的行为。接口则是描述一些原子级别的功能块,不相关的具 体类型都可以实现它 。接口 以功能块的方法来描述这些对象 的行为。如果你明白它们的不同之处,你就可 以创建出表达力更强的设计,并且它们面对修改是有很加强的伸缩性 的。类 的继承可以用来定义一些相关 类型 。通过实现一些接口来暴露部份功能来访 问这些类型接口还可以防止被装箱的struct的拆箱问题。 阅读全文
posted @ 2012-10-25 10:31 Q&A 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 首先来看MSDN中关于这个接口的说明:[ComVisible(true)]public interface IDisposable{ // Methodsvoid Dispose();}1.[ComVisible(true)]:指示该托管类型对 COM 是可见的.2.此接口的主要用途是释放非托管资源。当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存。但无法预测进行垃圾回收的时间。另外,垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。将此接口的Dispose方法与垃圾回收器一起使用来显式释放非托管资源。当不再需要对象时,对象的使用者可以调用此方法。一:基本应用1.我们来定义 阅读全文
posted @ 2012-10-25 10:02 Q&A 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 是的,值类型可以转化为System.Object或者其它任何的接 口引用。这些转化是隐式的,使得发现它们成为繁杂的工作。这些也就是环境和语言的规则,装箱与拆箱 操作会在你不经意时做一些对象 的拷贝,这会产生一些BUG 。同样,把值类型多样化处理会对性能有所损 失。时刻注意那些把值类型转化成System.Object或者接口类型 的地方:把值类型放到集合里,调用定义参 数为System.Object类型 的方法,或者强制转化为System.Object。能够避免就尽量避免 阅读全文
posted @ 2012-10-25 09:24 Q&A 阅读(155) 评论(0) 推荐(0) 编辑