李超

cc编程笔记本。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

12 2007 档案

摘要:1 我们经常说要优化代码 提高性能 减少资源占用率 但是一定要对症下药 优化一句sql查询所带来的性能提升可能相当于减少一亿次引用的拷贝。 2 Asp.Net的ViewState可以通过关闭web.config里的enableViewState和enableSessionState来关闭 阅读全文
posted @ 2007-12-31 00:02 coderlee 阅读(219) 评论(0) 推荐(0)

摘要:以前c++的时候大家用虚类,而没有接口的概念,因为c++是多根派生的。 C#变成了单根派生,一个类只能继承自一个父类,但可以继承于多个接口,其中的抽象类与接口之间有许多相同点。 首先说接口,接口的定义是包含一组虚方法的载体,是严格的CAN-DO关系,这个东西可以包含方法的声明但不能包含实现,CLR允许接口包含事件,属性,索引器,静态方法,静态字段,静态构造函数和常数,但是c#不允许接口包含任... 阅读全文
posted @ 2007-12-30 23:34 coderlee 阅读(432) 评论(0) 推荐(0)

摘要:一个基础知识,但不是每个人都能说清楚。 子类对象转换为父类时,可以隐式转换。 父类对象转换为子类时,必须显示转换,如父类类型所指向的实际对象是父类对象而非子类对象,则出现运行时错误InvaildCastException。 使用as操作符可以避免InvalidCastException,只是当转换不成功时返回null。 MyTypeA a = new MyTypeA(); ... 阅读全文
posted @ 2007-12-29 23:56 coderlee 阅读(411) 评论(0) 推荐(0)

摘要:有些应用程序是长时间运行的,但又不想让它占据任务栏,还想经常调出来看下结果,这个时候就可以使用托盘式的程序。 .Net实现托盘程序不复杂,基本的原理是这个样子的: 1 给应用程序窗体拖一个NotifyIcon控件。其实托盘区在微软的标准称呼就叫 通知区域,所以这个控件的名字叫NotifyIcon。 2 给NotifyIcon的Icon属性赋一个Icon类的实例,就是设置图标。 3 给NotifyI... 阅读全文
posted @ 2007-12-28 22:04 coderlee 阅读(504) 评论(0) 推荐(0)

摘要:1 在变化到来之前,任何的提前设计,都应先假设为过度的。 2 尽量先寻找类库中是否已存在解决特定问题的组件,原理性的知识是必须的,但实际开发中更应该使用类库中已封装好的组件,以便提高开发效率。 阅读全文
posted @ 2007-12-28 19:20 coderlee 阅读(402) 评论(0) 推荐(0)

摘要:BackgroudWorker是.Net的Winform开发中处理可能会阻塞界面的耗时操作的标准做法,这种做法也许不是效率最高的(你可以使用BeginInvoke与EndInvoke并在EndInvoke获取结果然后根据结果修改界面显示,当然是询问InvokeRequired方式,也可以Thread.Start并在函数中根据结果以control.Invoke方式修改界面显示,但是这些不是最优雅的代... 阅读全文
posted @ 2007-12-27 23:16 coderlee 阅读(1575) 评论(1) 推荐(0)

摘要:多线程Winform编程会带来的常见问题 1 UI线程执行耗时操作 UI线程被阻塞 无法响应窗体消息队列中的其他消息。 2 非UI线程修改UI属性 由于窗体资源也属于临界资源 所以有互斥访问的机制。 3 线程的同步问题 线程A等待线程B执行完毕后才能开始执行。 问题1的解决方法: 解决方法只有一种,就是开启新线程执行耗时操作,使原界面线程仍能够响应窗体消息队列中的用户消息及系统消息。 ... 阅读全文
posted @ 2007-12-27 18:23 coderlee 阅读(2477) 评论(0) 推荐(0)

摘要:以前总以为那个选择文件的窗口要自己做,后来才知道不过是一个API而已. 这个API函数的声明是这个样子的: WINCOMMDLGAPI BOOL APIENTRY GetOpenFileNameA(LPOPENFILENAMEA); WINCOMMDLGAPI BOOL APIENTRY GetOpenFileNameW(LPOPENFILENAMEW); #ifdef UNICODE #def... 阅读全文
posted @ 2007-12-23 00:38 coderlee 阅读(1344) 评论(0) 推荐(0)

摘要:WINBASEAPI DWORD GetTickCount(VOID); 返回自系统启动到现在的毫秒数,每隔49.7天就清零。 阅读全文
posted @ 2007-12-21 23:39 coderlee 阅读(1323) 评论(0) 推荐(0)

摘要:BOOL GetComputerName( LPTSTR lpBuffer, LPDWORD lpnSize ); GetComputerName函数用来获取计算机的名称,lpBuffer是TCHAR[]类型,TCHAR的数量可以设置为MAX_COMPUTERNAME_LENGTH+1,lpnSize就是lpBuffer的位数 阅读全文
posted @ 2007-12-20 23:32 coderlee 阅读(1735) 评论(0) 推荐(0)

摘要:昨天晚上忘记写了 现在补上 WinMain函数中有四个参数 hInstance hPreInstance lpCmdLine nCmdShow 今天介绍下第三个参数的作用 第三个参数可以向应用程序传入一个值 可以在VS的项目属性的命令中设置该参数 阅读全文
posted @ 2007-12-20 08:55 coderlee 阅读(887) 评论(1) 推荐(0)

摘要:MessageBox函数用于弹出对话框 原型如下 int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType ); 该函数也分为MessageBoxA MessageBoxW两个版本。 hWnd是所属的父对话框. lpText是需要显示的内容 lpCaption是窗口标题文字 u... 阅读全文
posted @ 2007-12-18 23:22 coderlee 阅读(878) 评论(0) 推荐(0)

摘要:const int MAXSIZE_APPBUF = 256; TCHAR lpszApp[MAXSIZE_APPBUF]; LoadString(NULL, IDS_WELCOME, lpszApp, MAXSIZE_APPBUF); AfxMessageBox(lpszApp); LoadString,可以载入一个资源文件里的字符串,是一个宏,对应LoadS... 阅读全文
posted @ 2007-12-17 22:52 coderlee 阅读(3071) 评论(0) 推荐(0)

摘要:C#中的子类无法调用父类的事件,可以通过在父类中创建一个方法来调用父类的事件,而子类通过调用父类的方法来触发事件。 阅读全文
posted @ 2007-12-17 07:31 coderlee 阅读(3211) 评论(0) 推荐(0)

摘要:int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ); The WinMain function is called by the system as the initial entry point for windows-ba... 阅读全文
posted @ 2007-12-16 15:15 coderlee 阅读(487) 评论(0) 推荐(0)

摘要:sp_addlinkedserver 'linkserver','','SQLOLEDB','linkserver.com' sp_addlinkedsrvlogin 'linkserver','false',null,'sa','asdf' 第一句是添加一个名字为linkserver的链接服务器 地址是linkserver.com 第二句是针对第一句添加的Linkserver添加一个访问帐号... 阅读全文
posted @ 2007-12-14 23:38 coderlee 阅读(591) 评论(0) 推荐(0)

摘要:模块的耦合关系分为紧耦合和松耦合,紧耦合关系在一个模块更改时其他依赖于该模块的模块都要随之更改,而松耦合模块更改时,不会或者影响到的模块比较少. 设计模式要解决的问题就是将经常发生改变的模块抽象成接口或抽象类,让依赖该模块的其他模块调用接口类型的方法,而不关心该接口指向的对象的实际类型。 在软件系统中经常会遇到某对象的创建工作,由于需求的变化,这个对象的实现代码也会有剧烈的变化,但是无论实现的... 阅读全文
posted @ 2007-12-05 21:39 coderlee 阅读(260) 评论(0) 推荐(0)

摘要:生成器模式是比较简单且应用广泛的。 动机:在软件系统中经常面临一个复杂对象的创建工作,通常由各个部分的子对象用一定的算法构成,由于需求的变化,各个子对象会剧烈的变化,可组成复杂对象的主流程是很稳定的,这个时候就需要使用生成器模式了。 生成器模式就是为了应对复杂对象创建过程中各个子对象代码的变化的。 解决方法: 将一个复杂的对象的创建过程与子对象的创建相分离,使同样的构建过程获得不同的对象。 阅读全文
posted @ 2007-12-05 20:59 coderlee 阅读(310) 评论(0) 推荐(0)

摘要:不同于singleton模式的实现,singleton模式的实现只使用了面向对象概念中的一个封装,也就是封装了构造函数,不对外可见,对外暴露出一个获取唯一实例的方法,并没有利用到面向对象概念中的继承,多态等高级功能。 abstract factory模式说的是抽象工厂,抽象工厂中继承出了两个实际工厂,这两个实际工厂开始生产对象,两个工厂生产出来的对象风格不同,比如游戏开发中,有一个古典物品工厂,一个现代物品工厂,他们都派生与抽象工厂,都实现了创建计算工具这个方法,而古典工厂中的创建计算工具将返回一个算盘,而现代工厂返回的计算工具是一个计算器,古典工厂中创建的商人是一身汉服的店小二,现代工厂创建的商人是一身西装的小老板,这样在实际游戏中先实例化一个古典工厂,就可以依靠古典工厂得到身穿汉服拿着算盘的店小二,或者依靠现代工厂得到身穿西装拿着计算器的小老板,而不会得到一个身穿汉服却拿着计算器的店小二或者身穿西装而抱着算盘的小老板 阅读全文
posted @ 2007-12-05 20:57 coderlee 阅读(558) 评论(0) 推荐(0)

摘要: 动机: 在软件系统中仅能有一个该类的实例。 保证软件系统只有一个该类的实例,这个工作应该让这个类去实现,这是该类的职责,于是应该给这个类增加一个方法,来访问该类的唯一实例。而不能让客户代码(调用该类的代码)环境来承担维护该类仅有一个实例的工作。 意图: 保证一个类仅有一个实例,并提供一个该实例的全局访问点。 实现方法: 在类中创建一个类型为该类的静态实例,使该实例成为全局唯一实例,并且以private方式封闭了构造方法,从而禁止了new的创建,而提供一个GetInstance()的公共静态方法来返回全局唯一实例。 阅读全文
posted @ 2007-12-05 20:55 coderlee 阅读(255) 评论(0) 推荐(0)