bindsang

工作五年,长期从事于asp.net方面的编程,业余爱好VC编程,温和、谦虚、自律、自信、善于与人交往沟通
随笔 - 35, 文章 - 0, 评论 - 64, 阅读 - 64928
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

随笔分类 -  C#点点滴滴

和C#相关的东东,包括算法,模式之类的
摘要:c#中所有可以被抛出的异常都是直接或间接继承自System.Exception类 支持的捕获异常的语句块如下: try … catch try … catch … finally try… finally c#代码块中生成异常堆栈信息的时机不是在throw语句执行的地方,而是在第一次捕获的地方 以上三种方式中 try ... finally一定不会影响堆栈信息 可能会影响的地方主要集中在catch块中 catch子句声明方式又有以下几种 catch{} catch(Exception){} catch(Exception ex){} 这三种写法从捕获异常的能力上来说基本上是等效 第三种方式只是让编写代码的人可以使用异常参数,如果不使用异常参数的话可以用前面两种,第二种只是更加明确的指出了捕获的是Exception或者是从Exception继承的异常... 阅读全文

posted @ 2012-06-26 16:22 阅读(2690) 评论(2) 推荐(1) 编辑

摘要: 最近做了一个Web项目,服务端采用ASP.NET。浏览器中需要用到证书登录,为了使以后能够读取USBKey证书和密钥,所以使用了ActiveX技述。这中间遇到了好多的问题,不过最后都一个一个解决了。 首先是从客户机里导出证书和密钥的问题,基本的CryptoAPI提供了两个函数可以导出,一个是CryptSaveStore,另外一个是PFXExportCertStore函数。网上关于这两个函数导出证书的代码都有很多了,我也不想再在这里写。不过这两个函数都有一些问题,用起来我都不太满意。第一个函数也就是CryptSaveStore导出的证书怎么也不能用Windows向导导入到证书管理器中,这个问题折腾了我好久,最终没能解决只得放弃;第二个函数也就是PFXExportCertStore,这个函数虽说能导出证书可是只能导出PFX格式的,也就是可能包括了私钥(如果原本有的话)在内的证书,而且还得给个导出密码,重新导入的时候还得再次输入相同的密码。我想要做的是只导出证书文件本身,不导出私钥,对它用私钥签名,任何拿到证书的人都可以用证书上带的公钥进行验证证书的合法性,而且 阅读全文

posted @ 2009-06-18 23:42 阅读(1202) 评论(0) 推荐(0) 编辑

摘要:每个程序员学编程的时候都是从单线程的程序入手的,等到了具有比较多的编程实践经验后才开始接触到多线程编程,多线程的技术在程序使用上带来新的友好体验的同是也带来了一系列的问题,其中最大的一个问题就是“同步/死锁”。 在C#中提供了多种实现同步的类和方法,下面就分别对每种方式作一个说明。 阅读全文

posted @ 2008-12-24 11:44 阅读(4305) 评论(7) 推荐(1) 编辑

摘要:通常我们在做多线程编写WinForm程序的时候经常听到的一句话就是“窗体控件只能在主线程中创建”,刚开始的时候我也接受的是这样的教育,因此一直以来一直在编程中有意识的这样做了。平时也没有过多的去想为什么要这样做,就把这个当做是一条公理了,就像是数学中“两个不同的点确定一条直线,三个不在同一直线上的点确定一个平面”一样那么简单。 最近又一次在做一个WinForm程序,突发奇想想要试试在非主线程创建一个窗体控件会有什么结果为什么不能这样做。 结果运行这段程序的时候@1这个地方的两行代码也执行到了,可是却一点问题都没有,没有异常,没有特殊的提示,程序也能正常退出。这是怎么回事呢?不是说不能在非主线程上创建控件吗?可是我这个程序不是好好的运行着又怎么解释呢。带着这样的问题我又回头去看了一个自己写的代码,这次发现了一个问题:frm 调用的是ShowDialog方法,这会使调用线程一直阻塞在这个地方。会不会是这个原因呢?于是我把ShowDialog替换成了Show方法,一试,果然就出错了。我又试了其它几种常见的控件,TextBox,Label,Button都是这样,唯一 阅读全文

posted @ 2008-12-23 15:27 阅读(1700) 评论(7) 推荐(2) 编辑

摘要: C#里面没有现成的DirectShow的COM组件的定义,虽说在C#中可以使用一些特定的方式来操作COM组件(C#中COM操作(一)---实例化),可是对于DirectShow这样需要声明一大批的COM接口,类型,枚举却是一件漫长又枯燥的事件,而且搞不好一个不小心中间出个错误,导致最后调试总不通过而抓狂。即便是现在有了DirectShow.NET提供的对绝大部分的DirectShow的C#翻译,可是面对网上那么多的C++开源代码还有少得可怜的C#操作DirectShow的代码,你会怎么办?难道又是一行一行的翻译成C#吗,反正我是不会这样干的,于是这种方式首先被毙掉了。 俗话说最优秀的程序员也是最懒的程序员,类和方法能公用的就尽量公用,已存在的实现就不需要自己再去写一次了。既然有现成的C++的实现好的代码为什么不可以再次拿来用一用呢。可是在C#里面想要使用C++的实现(注意这里我用的是实现,并没有指定是类或方法),比较常见的是通过 DllImportAttribute特性导入相应的程序集,可是这种方式只可以调用方法,而且是限定死了的只能是C语言形式的导出方法。 阅读全文

posted @ 2008-12-22 14:23 阅读(2000) 评论(1) 推荐(2) 编辑

摘要:前几天我的一个同事在和我交流的时候,提到了这样一个问题:为什么在DateTime里面的一堆AddXXX的成员方法不是作用在实例本身,而是另外返回一个重新实例化的DateTime,在通常的理解上我们看到一个对象的AddXXX的实例方法的时候,第一感觉应该是作用在本身上,即是把本身某个字段的值改变成运算后的值。可是在这里却不遵循这样的“常理”。这样在用的时候,想把一个DateTime的值加上一定的时间的话,很容易就忘了需要重新执行赋值操,导致程序执行的结果和我们预期的不一样。 阅读全文

posted @ 2008-08-08 17:40 阅读(421) 评论(0) 推荐(0) 编辑

摘要:上一篇我们讲到了C#中创建COM对象的几种方式。不知大家也注意到了,最后一种方式中JetEngineClass类并没有提供方法供我们调用,要使用它的话必须先把这个引用转成接口引用才能直接使用里面的方法,实现早期函数绑定。虽然我们在声明JetEngineClass类的时候并没指定该类实现了IJetEngine接口,但是后面在使用的时候却直接把engine用as操作转成了IJetEngine接口,而且居然转成功了。而且大家也可以用is操作符测试一下,engine is IJetEngine反回的结果也为true。这就是本篇要讲的---C#中COM对象接口的查询。 阅读全文

posted @ 2008-08-01 12:22 阅读(3498) 评论(0) 推荐(0) 编辑

摘要:用C#做WinForm程序,时间长了难免会遇到和COM组件打交道的地方,用什么方式创建COM对象也成了我们必须面对的一个问题.据我所知道的创建COM对象的方法一共有以下几种:.... 阅读全文

posted @ 2008-07-31 11:10 阅读(2644) 评论(3) 推荐(1) 编辑

摘要:使用C#也好几年了,从一开始的囫囵接收,到后来积累到一定程度后再回过头去细细思考,这期间也发现了一些恍然大悟,矛塞顿开的情况.我.NET的事件触发的原理的认识就是这样走过来的. 在刚使用C#的时候(vs2003),没有多少参考资料,没有Reflector,只有一个随着IDE一起的MSDN,所有的东东基本上都需要从那上去去找,那个时候对.NET里面的事件一直有几个不明白的地方: 1. 事件本质上是一个委托,为什么在声明的时候没有给事件初始化,但是挂接事件的时候却可以直接用+=给事件增加一个处理函数,这个时候却不会报NullReference异常,而单独声明一个委托引用直接这样使却会报错? 2. 为什么基类声明的事件在派生类里没法直接调用触发事件? 3. 为什么在Framework中,对于一个没有密封(sealed)的类,每个声明的事件基本上都有一个On+事件名称的protected的函数(有时候还是虚函数)? 阅读全文

posted @ 2008-07-28 16:13 阅读(420) 评论(0) 推荐(0) 编辑

摘要:在我们日常的编程当中,常常会遇到判断某个整数属于奇数还是偶数的情况。 一般我们都是用的取模的操作,前几天在网上看到了一种称作快速有效的判断做法,利用2进制进行判断。 阅读全文

posted @ 2008-07-28 11:42 阅读(1088) 评论(1) 推荐(0) 编辑

摘要:C#作为一种纯面向对象的话言,为它编写的整个代码里面到处都离不开对象。一个对象的完整的生命周期是从开始分配空间到初始化,到使用,最后是销毁,使用的资源被回收。要想真正写出面高质量的代码,我们就得对这期间每一个阶段是怎么样一个状态,framework都做了些什么,我们又能够做些什么都要有些了解才行。一般来说大部分程序员对于一个创建好了的对象怎么使用都是比较清楚的,所以本文也就不想就这一部分做太多的说明,重点就集中开对象的创建和销毁这两个阶段,这也是程序员最容易范错误的阶断。本文首先来讲一讲对象成员的初始化,至于对象的释放和销毁,我想放到另外一篇文章里去讲。虽然本文是以C#2005 为例的,但推而广之,对于其它的基于CLS规范的语言应该也是一样的。 阅读全文

posted @ 2008-07-28 11:03 阅读(3249) 评论(15) 推荐(0) 编辑

摘要:众所周知,在.NET下面专门有个Regex类是处理正则表达式的。本人几年的编程经历,多多少少也接触了一些正则表式处理字符串的问题,可以说对于写正则表达式还算是小有心得。 这几年一直在.NET下面编程,与Regex类接触的也挺多的,老早就发现RegexOptions选项中有很多是其它语言(如C/C++,JS)的正则表达式中没有的,像是Compiled,ExplicitCapture,RightToLeft,Singleline几个就比较特别的。而Singleline和Multiline这两项单从字面上的意思来说是“单行模式”和“多行模式”,具体什么意思我也不会多解释了吧,用正正则表达式的人都知道。在我的潜意识里一直认为这两项是互斥的,不能同时存在,一直在下意识的避开同时去使用。 阅读全文

posted @ 2008-07-28 10:43 阅读(1078) 评论(0) 推荐(0) 编辑

摘要:本人现在长期从事于.NET下的开发,因为工作的关系,间断的做过一些C++,DELPHI的程序,对后两者的程序语言有一定的了解,因此在平时也经常遇到有人问我关于C#和另外两种语言相比有哪些特点。我所了解的其中很大一个特点就是C#里没有指针,所有的对象全部通过引用来访问。引用的类型之间不能随便进行转换,避免了程序运行过程中出现的转换可能发生的问题(例如把一个整型转成一个指针进行访问等类似的潜在危险)。普能对象可以通过指针来引用,可是对于C++,DELPHI中的函数指针作为参数传送这样的函数调用形式在C#里面又应该怎么来表示呢。答案就是Delegate。同C++/DELPHI 用函数指针来实现事件(Event)和回调函数类似,在C#中是通过Delegate来实现。 阅读全文

posted @ 2008-07-28 10:14 阅读(2231) 评论(5) 推荐(0) 编辑

点击右上角即可分享
微信分享提示