建议45:为泛型类型参数指定逆变 逆变是指方法的参数可以是委托或者泛型接口的参数类型的基类。FCL4.0中支持逆变的常用委托有: Func<int T,out TResult> Predicate<in T> 常用委托有: IComparer<in T> 下面例子演示了泛型类型参数指定逆变所带来的好 ...
建议44:理解委托中的协变 委托中的泛型变量天然是部分支持协变的。为什么是“部分支持协变”?看下面示例: 上中的GetAManager返回的是一个Manager,但是在使用中,其实是将其赋值给一个泛型参数为Employee的委托变量。因为存在下面一种情况,所以编译不过: 要让上面的代码编译通过,同样 ...
建议46:显式释放资源需继承接口IDisposable C#中的每一个类型都代表一种资源,资源分为两类: 托管资源:由CLR管理分配和释放的资源,即从CLR里new出来的对象。 非托管资源:不受CLR管理的对象,如Windows内核对象,或者文件、数据库连接、套接字、COOM对象等。 如果我们的类型 ...
起源: 设计模式并非是软件开发中的专业术语。实际上‘模式’最早诞生于建筑学。20世纪30年代,哈佛大学建筑学博士和他的研究团队花了约20年的时间, 研究了为解决同一问题而设计出不同结构建筑,从中发现了那些高质量设计中的相似性,并且用‘模式’来指代相似性。 设计模式:在面向对象软件设计中针对特定问题的 ...
分类:
Web程序 时间:
2017-12-04 00:06:44
阅读次数:
255
NOJ的一道题 求助大神 Java爬虫,信息抓取的实现 C++实现给多个变量传值 指针定义成全局和定义在main中为什么不一样?定义在main中执行中止 cqj慰膛哦http://p.baidu.com/itopic/main/center?uid=b2fe61626334633530376481a ...
分类:
其他好文 时间:
2017-12-03 11:23:15
阅读次数:
186
一、基础设施安全 这个不用多说,服务器、操作系统都要用正规的高质量的,安装杀毒软件防火墙,使用攻击检测系统。 二、应用系统安全 开发程序的时候,应当事先知道并在代码层面处理大部分常见的安全问题。 1.sql注入 mybatis就使用#比使用$能规避掉很多sql注入攻击。 2.csrf(跨站请求伪造) ...
分类:
其他好文 时间:
2017-12-02 14:09:14
阅读次数:
210
建议40:使用event关键字为委托施加保护 在建议中我们实现了一个具有通知功能的文件传输类,如下: 像这样调用: 以上调用者代码本身是和FileUploader类一起的,这起码存在两个问题: 1)如果在Main中另起一个线程,该工作线程则可以将FileProgress委托链置为空: 2)可以在外部 ...
建议42:使用泛型参数兼容泛型接口的不可变性 让返回值类型返回比声明的类型派生程度更大的类型,就是“协变”。如: Programmer是Employee的子类,所以Programmer对象也是Employee对象。方法GetAEmployee返回一个Programmer的对象,也就是相当于返回一个E ...
建议39:了解委托的实质 理解C#中的委托需要把握两个要点: 1)委托是方法指针。 2)委托是一个类,当对其进行实例化的时候,要将引用方法作为它的构造方法的参数。 设想这样一个场景:在点对点文件传输过程当中,我们要设计一个文件传输类,该传输类起码要满足下面几项功能: 传输问题件; 按照百分制通知传输 ...
建议41:实现标准的事件模型 上一建议中,我们实现了一个带事件通知的文件传输类FileUploader。虽然已经满足需求,但却不符合C#的编码规范,查看EventHandler的原型声明: 我们应该知道微软为事件模型定义的几个规范: 委托类型的名称已EventHandler结束; 委托原型返回值为v ...