摘要: 当我们将第三方的DLL加载到进程中意味着冒险,DLL中的代码很容易破坏应用程序的数据结构和代码,DLL还可以尝试利用应用程序的安全上下文来访问它本来无权访问的资源,所以CLR就有了AppDomain功能来解决这些问题。CLR COM服务器初始化时,会创建一个AppDomain。AppDomain是一组程序集的逻辑容器。CLR初始化时创建的第一个AppDomain称为默认AppDomain,这个默认的AppDomain只有在Windows进程终止时才会被销毁。除了默认的AppDomain,正在使用非托管COM接口方法或者托管类型方法的一个宿主还可以指示CLR创建额外的AppDomain。AppD 阅读全文
posted @ 2013-01-04 14:45 Lordbaby 阅读(424) 评论(0) 推荐(0) 编辑
摘要: public static T Min<T o1,T o2> where T:IComparable<T>{ if(o1.CompareTo(02)<0) return o1; return o2;}C#的关键字where告诉编译器,为T指定的任何类型都必须实现同类型(T)的泛型IComparable接口,有了这个约束,就可以在方法中调用CompareTo,因为已知IComparable<T>接口定义了CompareTo现在,当代码引用一个泛型类型或者方法时,编译器要负责保证类型实参符合指定的约束,例如,假如编译以下代码:public static v 阅读全文
posted @ 2012-11-26 14:48 Lordbaby 阅读(869) 评论(0) 推荐(0) 编辑
摘要: 含义:在使用泛型类型参数的方法在进行JIT编译时,CLR获取方法的IL,用指定的类型实参进行替换,然后创建恰当的本地代码,这是泛型的主要特性之一。然而有一个缺点,CLR要为每种不同的方法/类型组合生成本地代码,我们将这种现象称之为代码爆炸(code explosion),它会使应用程序的工作集显著增大,从而损害性能。当然CLR不会坐视不管的,会提供一系列的优化措施,能够缓解代码爆炸1.首先,假如为一个特定的类型实参调用了一个方法,以后再次使用相同类型实参来调用这个方法,CLR只会为这个方法/类型组合编译一次代码。所以,如果一个程序集使用List<DateTime>,一个完全不同的程 阅读全文
posted @ 2012-11-26 10:32 Lordbaby 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 有时候反省语法会将开发人员弄糊涂,因为源代码中可能散布着大量的“<”和“>”符号,这会有损可读性。为了对语法的进行增强,有的开发人员定义了一个新的非泛型类型,他从一个泛型类型派生,并指定了所有类型实参,例如,为了简化下面这样的代码:一些开发人员可能首先定义下面这样一个类:internal sealed class DateTimeList:List<DateTime>{ //这里无需放入任何代码}然后就可以进行下一步简化创建列表的代码(没有了“<”和“>”符号):DateTimeList dt = new DateTimeList();这样做表面上是方便了( 阅读全文
posted @ 2012-11-26 10:30 Lordbaby 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 泛型类型仍然是类型,所以它能从其他任何类型派生,使用一个泛型类型并指定类型实参时,实际是在CLR中定义一个新的类型对象,新的类型对象是从泛型类型派生自的那个类型派生的,换言之,由于List<T>是从Object派生的,所以List<String>和List<Guid>也从Object派生。类似地,由于DictionaryStringKey<TValue>派生自Dictionary<String,TValue>所以DictionaryStringKey<Guid>派生自Dictionary<String,Guid> 阅读全文
posted @ 2012-11-26 10:27 Lordbaby 阅读(816) 评论(0) 推荐(0) 编辑
摘要: 在.NET中,CLR会为应用程序使用的每个类型创建一个内部数据结构,这种数据结构成为:类型对象(type Object)。具有泛型类型参数的类型仍然是类型,CLR同样会为它创建一个内部类型对象。无论是引用类型(类)、值类型(结构)、接口类型,还是委托类型,这一点都是成立的。然而,具有泛型类型参数的类型称之为:开放类型(open type),CLR禁止构造开发类型的任何实例。这一点类似于CLR禁止构造结构类型的实例。代码引用一个泛型类型时,可指定一组泛型类型实参,假如所有类型实参传递的都是实际数据类型,类型就称为封闭类型(closed type)。CLR允许构造封闭类型的实例,然而,当代码引用一 阅读全文
posted @ 2012-11-26 10:22 Lordbaby 阅读(3029) 评论(0) 推荐(2) 编辑
摘要: 纯属复习笔记,小总结:文字较多排版很糟糕的随笔,岁很难赏心悦目,但也知识啊,读书得细心看,仔细看,不能被披着文字的纸老虎给吓住,也不要被千篇一眨眼就过了知识点梳理:1.概述熟悉面向对象编程的开发人员都深谙这种编程方式的好处,其中一好处就是"代码重用",他极大的提高了开发效率,也就是说它可以派生一个类,让它继承基类的所有能力,派生类只需重写虚方法,或添加一些新方法,就可以定制派生类的行为。2.泛型快速入门泛型:英文generic,-->对应的命名空间 System.Collections.Generic泛型是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用 阅读全文
posted @ 2012-11-23 15:36 Lordbaby 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 如果定义一个事件,就意味着类型要提供以下能力1.方法可登记它对该事件的关注2.方法可注销它对该事件的关注3.该事件发生时,登记了的方法会收到通知类型之所以能提供事件通知的功能,是因为类型维护了一个已登记方法的列表,事件发生后,类型将通知列表中所有已登记的方法。CLR的事件是建立在委托的基础上,委托是调用回调方法的一种类型安全的方式,对象通过回调方法来接受它们订阅的通知。场景:电子邮件应用程序,当电子邮件到达时,用户希望将该邮件转发给传真机或寻呼机1.1、第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息事件引发时,引发事件的对象可能希望向接收事件通知的对象传递一些附加信息。好吧,我们 阅读全文
posted @ 2012-11-20 11:31 Lordbaby 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 通过MVC的路由机制来实现对当前线程的区域性来设定,然后重定向请求页面来实现对已绑定数据的语言之间的切换,例如中文zh-CN,英文en-US新建一个mvc3.0 的Internet应用程序 实例只针对注册页面进行多语言话,在资源文件通过键值来定义语言,2个资源文件公用一个类。通常在开发时,只要一个默认的Resource.resx,当开发完成之后,拷贝一个相同的Resource.resx,并改名字成上面的样子,然后手动或自动将其中的所有value都翻译成对应的语言。然后是核心的类LocalizationHelpers的主要代码:using System;using System.Collecti 阅读全文
posted @ 2012-09-26 17:10 Lordbaby 阅读(2319) 评论(3) 推荐(5) 编辑
摘要: /*查询来自'Spain'的客户,对每个匹配的客户,执行在Orders.custid列上的索引执行一次查找操作检查Orders表是否包含具有该客户的custid的订单子查询中筛选列custid上的索引在这里非常有帮助,因为通过它可以直接访问Orders表中具有特定custid值的行*/SET STATISTICS TIME ONSELECT custid,companynameFROM Sales.Customers AS CWHERE country=N'Spain'AND custid IN (SELECT custid FROM Sales.Orders) 阅读全文
posted @ 2012-08-31 15:40 Lordbaby 阅读(208) 评论(0) 推荐(0) 编辑