摘要: 某些数据类在开发中非常常用,以至于许多编译器允许代码已简化的语法来操作它们。例如可以使用以下语法来分配一个整数: System.Int32 a = new System.Int32(); 当然,你肯定不愿意使用这种语法,C#允许使用如下所示的语法: int a = 0; 这种语法不仅增强代码的可读性,而且生成的IL代码和是有System.Int32时生成的IL代码是完全一致的。 编译器直接支持的数据类型称为基元类型(primitive type)。基元类型直接映射到Framework类库(FCL)中存在的类型。比如以下4行代码都是正确的,生成的IL代码也是相同的。int a = ... 阅读全文
posted @ 2014-01-23 13:33 烧点饭 阅读(834) 评论(0) 推荐(0) 编辑
摘要: CLR要求所有类型最终都要从System.Object派生。也就是所,下面的两个定义是完全相同的,//隐式派生自System.Objectclass Employee { .....}//显示派生子 System.Objectclass Employee : System.Object { ..... } 由于所有类型最终都是从System.Object派生的,所以可以保证每个类型的每个对象都有一组最基本的方法。 System.Object提供了如下所示的公共实例方法。 Equals(Object)确定指定的对象是否等于当前对象。如果两个对象具有相同值就返回ture.Get... 阅读全文
posted @ 2014-01-21 16:19 烧点饭 阅读(1836) 评论(0) 推荐(0) 编辑
摘要: 1.6 Framework类库1. .NET Framework中包含了Framework类库(Framework Class Library,FCL)。2. FCL是一组DLL程序集的统称,其中含有数千个类型定义,每个类型公开一些功能。1.7 通用类型系统1. CLR是完全围绕类型展开的。2. 类型为应用程序和其他类型公开了功能。通过类型,用一种编程语言写的代码能与另一种语言写的代码沟通。3. 由于类型是CLR的根本,所有MicroSoft指制定了一个正式的规范,即"通用类型系统"(Common Type System,CTS),它描述了类型的定义和行为。4. CTS规定 阅读全文
posted @ 2014-01-18 21:40 烧点饭 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 1. NGen.exe工具,可以在一个程序安装到用户计算机时,将IL代码编译成为本地代码。由于代码在安装时已经编译好,所以CLR的JIT编译器不需要再运行时编译IL代码了,这有助于提升程序的性能。2. NGen.exe可以加快程序的启动速度,减少程序的工作集。3. NGen.exe生成的文件存在以下问题: 1)没有知识产权保护。在运行时,CLR要求访问程序集的元数据,这就要求同时发布包含IL代码和元数据的程序集。 2)NGen生成的文件可能失去同步。NGen生成的文件时,会与当前执行环境相适应的,当你改变了先前的执行环境时,NGen生成的文件就不能使用了。 3)较差的执行时性能。NGen... 阅读全文
posted @ 2014-01-17 16:18 烧点饭 阅读(775) 评论(0) 推荐(1) 编辑
摘要: 1. 托管程序集同时包含元数据和IL。IL是与CPU无关的机器语言。可将IL是为一种面向对象的机器语言。2. IL也是能使用汇编语言来写的,MicroSoft专门提供了一个名为ILAsm.exe的IL汇编器和一个名为ILDasm.exe的IL反汇编。3. 高级语言只公开了CLR的所有功能的一个子集,IL汇编语言允许开发人员访问CLR的所有功能。如果你需要当前使用的语言不支持的CLR功能,可以使用IL语言或者其他CLR语言。4. 为了执行一个方法,首先必须将它的IL转换成为本地CPU指令,这是CLR的JIT(just-in-time或"即时")编译器的职责。5. 展示一个方法 阅读全文
posted @ 2014-01-17 16:01 烧点饭 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 1. 你生成的每个程序集可以是EXE,也可以是DLL。最终都是有CLR管理这些程序集中代码的执行。2. VS2010中,创建新的EXE项目时,默认平台是x86,而不是anycpu。3. Windows的64位版本提供了一个名为WoW64(Windows on Windows64)的技术,允许允许32位的Windows程序。这是因为这个技术能模拟x86的指令集,但这样会显著影响性能。4. 编译目标平台对生成的模型的影响以及运行时的影响。5. Windows检查好EXE文件头,决定创建32位、64位还是WoW64进程之后,会在进程的地址空间中加载MSCorEE.dll的x86,x64或IA64版本 阅读全文
posted @ 2014-01-17 15:03 烧点饭 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 1.CLR是不和托管模块一起工作的,CLR是和程序集一起工作的。2. 程序集是一个或多个托管模块/资源文件的逻辑性分组。3. 程序集是重用、安全性以及版本控制的最小单位。4. 程序集取决于你对编译器的选择,可以生产单文件程序集,也可以生产多文件程序集。在CLR中,程序集相当于一个"组件"。5.将托管模块合并成程序集图示:生成的 程序集会包含一个名为"清单"(maniest)的数据块。清单是有元数据构成的另一种集合。这些表描述了构成程序集的文件。6. 默认情况下,编译器实际会把生成的托管模型转化成程序集。C#编译器会生成含有清单的一个托管模块。清单指出程序 阅读全文
posted @ 2014-01-17 14:50 烧点饭 阅读(806) 评论(0) 推荐(0) 编辑
摘要: 1.公共语言运行时(Common Language Runtime,CLR)是一种可由多种编程语言使用的"运行时"。2. CLR的核心功能(比如内存管理,程序集加载、安全性、异常处理和线程同步等)可由面向CLR的所有语言使用。3. 用一个对应的编译器编译源代码之后,结果都是一个托管模块。4.托管模块是一个标准的32/64位Microsoft Windows 可移植执行体(PE32/PE32+)文件,它们都需要CLR才能执行。5. 托管的程序集利用Windows的数据执行保护和地址空间布局随机化增强整个系统的安全性。6. 托管模块的各个组成部分7. 本地代码编译器生成的是面向 阅读全文
posted @ 2014-01-17 14:30 烧点饭 阅读(629) 评论(0) 推荐(1) 编辑
摘要: 今天搞到NHibernate时,突然报了一个“NHibernate.Cfg.Configuration 的类型初始值设定项引发异常。”的异常。详细异常信息“System.IO.FileLoadException”类型的异常在 WebApplication1.dll 中发生,但未在用户代码中进行处理其他信息: 未能加载文件或程序集“log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)”注 阅读全文
posted @ 2014-01-06 21:36 烧点饭 阅读(3620) 评论(1) 推荐(0) 编辑
摘要: 在开始UnitOfWork模式之前有必要回顾下我们耳熟能详的Data Access Object(DAO)模式,即数据访问对象。DAO是一种简单的模式,我们构建应用的时候经常会使用到它,它的功能就是将DAL元素从应用程序中分离出来,在经典的三层架构中,我们会将数据持久化工作单独分离出来,封装成DAL层。但是,DAO并没有隐藏它面对是一张张数据表,而且通常情况我们会为数据库中的每一张表创建一个DAO类,想必大家对这种方式的极度的不爽了,。 由于DAO模式与数据表是一对一匹配的关系,因此DAO模式很好的配合了Active Record和Transaction Script业务模式,尤其是Ta... 阅读全文
posted @ 2014-01-04 22:58 烧点饭 阅读(17785) 评论(10) 推荐(18) 编辑
摘要: 一、引出模式在软件开发中,我们经常会遇到树型目录的功能,比如:管理商品的目录如果让你来实现这个功能,你会怎么做呢?我们先来分析分析:商品类别树上的节点有三类,根节点、树枝节点和叶子节点,在进一步根节点和树枝节点都是可以包含其他节点的,我们就叫它容器节点。这样,商品类别树就分为了容器节点和叶子节点,我们将它们分别实现成为对象。代码示例:class Program { static void Main(string[] args) { //定义所有的组合对象 Composite root = new Composite(... 阅读全文
posted @ 2013-12-20 20:00 烧点饭 阅读(793) 评论(0) 推荐(0) 编辑
摘要: 一、引出模式在前面的模式中,我们已经组装好了一台电脑,现在要做的是开机。是的,开机!对用户们来说开机只不过是按个电源按钮,跟喝水一样简单!但对于我们搞技术的,就不一样了,可这其中又发生了什么不为人知的事呢?自己百度去!我们先简单将以下流程,不做深入讲解。首先加载电源,然后设备自检,接下来装在操作系统,最后电脑就启动了。可是谁来完成这些过程?如何完成的呢?总不能让用户做这些吧,其实真正完成这些功能的是主板。那客户和主板又是怎么联系的呢?现实中,使用连接线将按钮连接到主板上,这样当用户按下按钮时,就相当与发命令给主板,让主板去完成后续工作。想想,在这里有没有什么问题?我们把这种情形放到软件开发中看 阅读全文
posted @ 2013-12-17 19:43 烧点饭 阅读(687) 评论(0) 推荐(0) 编辑
摘要: 观察者模式一、引出模式 在生活中,观察者模式非常的常见,比如到邮局、报社订阅报纸,比如QQ邮箱订阅,在比如你玩微博,关注了某“大婶”,“大婶”发布消息时,你也会相应的收到信息。 在软件开发中,就是这么一种情况。当一个对象的状态发生改变时,如何让依赖于它的所有对象得到通知,并进行相应的处理?二、认识模式1.模式定义 定义对象间一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 关键词:一对多,状态改变,得到通知,自动更新2.解决思路 我们来看下订阅报纸的例子。对于报社来说,它开始是不知道有多少个订阅者来订阅报纸,因此,报社是需要维护一个订阅者的... 阅读全文
posted @ 2013-12-11 19:56 烧点饭 阅读(765) 评论(0) 推荐(0) 编辑
摘要: 一、引出模式在生活中,当电脑缺少了一块主板,那会怎么样?如果有人这样问我的话,我就会马上跳出来说“这电脑肯定报废了”,当然这不是重点。假如少了主板电脑还可以用的话,想想,里面的CPU、显卡、声卡、光驱、硬盘等等,不是就要我们自己用线把它们连起来。想想就觉得头疼,那么现在你觉得主板在电脑里扮演着什么角色呢?在软件的开发过程中,势必会碰到这样一种情况,多个类或多个子系统相互交互,而且交互很繁琐,导致每个类都必须知道他需要交互的类,这样它们的耦合会显得异常厉害。牵一发而动全身又不木有啊!好了,既然问题提出来了,那有请我们这期的主角——中介者模式出场吧!二、认识模式1.模式定义用一个中介者对象来封装一 阅读全文
posted @ 2013-12-09 21:06 烧点饭 阅读(13578) 评论(2) 推荐(5) 编辑
摘要: 一、引出模式代理,在生活我我们非常常见。比如在中学时期,总追过女孩子吧!身为码农的我们,没追过也没关系,总看过别人追过女孩子吧!这里出现了3个重要人物,甲想追求乙,但甲又不认识乙,幸好乙的闺蜜丙是甲的小学同学,于是呢,甲就通过丙给乙传递一些纸条,情书之类的。在这里面同学丙就充当着一个代理的角色,甲无法直接找到乙说话,只能通过丙给乙传递消息。二、认识模式1.定义:代理模式为目标对象提供一种代理,并由该代理对象控制对这个目标对象的访问。2.模式结构和说明Subject:目标接口,定义代理和具体目标对象的接口,这样就可以在任何地方使用具体目标对象的地方使用代理对象。RealSubject:具体的目标 阅读全文
posted @ 2013-11-29 12:07 烧点饭 阅读(607) 评论(0) 推荐(0) 编辑
摘要: 一、引出模式1.生活中的例子大家都是知道,天朝家用电器的标准电压和美国标准电压是不同的,也就是我们把在天朝买的笔记本带到美国去也无法正常使用的,想要使用就必须跟换电源适配器。将电源适配器的电压换成适应美国的电压就可以正常使用的。而这个电源适配器的功能就是本篇所要学习的主题“适配器(Adapter)”。2.软件实例比如现在要做一个日志记录的系统,在第一版中使用文件为载体,可以对日志文件进行新增和删除,随着业务的扩大,文件日志已无法满足需求,于是在第二版中采用了数据库来存储日志,并能对日志进行CRUD。由于客户的多变,现在告诉你,这两种功能都要。问题出现了,就是第二版中定义的接口,对第一版并不是适 阅读全文
posted @ 2013-11-23 14:27 烧点饭 阅读(442) 评论(0) 推荐(0) 编辑
摘要: 本篇学习的是门面模式,又称外观模式,个人感觉还是觉得门面模式比较形象,是一种结构型模式。一、引出模式在生活中,比如我们准备自己配一台电脑,一种解决方案就是自己去电子市场一家一家的去询问,去购买,无疑这样是很浪费时间和精力的,另外一种解决方案就是直接去找一家装机公司,你把需求告诉它,它自然就会把相应的... 阅读全文
posted @ 2013-11-21 11:05 烧点饭 阅读(570) 评论(1) 推荐(1) 编辑
摘要: 一、引出模式开发场景:在前面工厂方法模式中我们提到出将数据以XML、TXT和数据库形式导出。现在我们再深化一下,对导出数据的格式进行约束。导出的文件,不管是格式,都分为文件头、文件体和文件尾文件头部分,需要描述:分公司名称、数据导出时间,文件体部分,需要描述:表的名称,单独一行。还有一些数据描述。文件尾部分,需要描述:导出人。当我们不使用模式时,不管是输出输出成文本文件还是,输出到XML,步骤基本上是不变的,都要经过以下四步1) 拼接文件头内容2) 拼接文件体内容3) 拼接文件尾内容4) 将内容输出到相应格式现在就是存在在使用输出格式时,都会重复这几个处理步骤,我们应该将其提炼出来,形成公共的 阅读全文
posted @ 2013-11-19 15:05 烧点饭 阅读(894) 评论(0) 推荐(0) 编辑
摘要: 本篇和大家一起学习IoC和DI即控制反转和依赖注入。当然听上去这词语非常的专业,真不知道是怎么组出来的,看上去难归看上去难,但稍微理解一下也就这么回事了。首先我们要明白IoC/DI干嘛用的,不然别人问“你知道IoC/DI吗?”,“知道啊!”,“那干嘛用的?”,呵呵,就郁闷了,其实IoC/DI的作用就两个字——解耦,说一千道一万,还是离不开这两个字。所以,IoC/DI的作用就是解耦。至于为什么要解耦,解耦在面向对象开发中的重要性在这里就不做细说了。下面我们来认识一下它们的真面目吧!要理解IoC/DI两个概念,就必须搞清楚如下问题:参与者都有谁?依赖:谁依赖于谁?为什么需要依赖?注入:谁注入谁?到 阅读全文
posted @ 2013-11-15 13:25 烧点饭 阅读(2329) 评论(1) 推荐(2) 编辑
摘要: 前面已经学习简单工厂、工厂方法以及抽象工厂,本篇学习的是探究这三种工厂之间的区别与联系。在面向对象的设计中,对象的管理是其核心所在。其中,对象的创建是对象管理的第一步。对象的创建非常简单,在C#中,只需要使用new操作符调用对象的构造函数即可。因此,管理对象最重要的是掌握创建对象的时机。我们首先从对象的特征来看。代表抽象意义的类型,有接口和抽象类,但它们是不能创建对象实例的,这就意味着我们要创建的对象都是与具体的对象类型有关的。也就是说,创建对象的过程必将涉及设计中的实现细节,从而导致创建者与具体的被创建者之间的耦合增强。从而就引出了工厂三剑客了!简单工厂:提供一个创建对象实例的功能,而无需关 阅读全文
posted @ 2013-11-14 16:57 烧点饭 阅读(1004) 评论(0) 推荐(0) 编辑
摘要: 本篇讲的是抽象工厂模式。一、引出模式场景:我们在组装电脑时,通常会选择一系列的配件,比如CPU、硬盘、内存等。这里只讨论CPU和主板。在选择CPU时,也会有它的品牌、型号、针脚数目等。在选择主板时,也会有它的品牌、芯片组等。在装机之前还有考虑这些配件之间的兼容性,也就是说,里面选择的各个配件之间是有关联的。对于装机人来说,他只知道要组装电脑,需要相应的配件,但是具体用什么配件,还是客户说了算。也就是说装机人只负责组装,而客户负责选择装机所需要的具体配件。那我们使用程序来实现上面的过程吧!对于客户,它需要选择自己需要的CPU和主板,然后告诉装机人自己的选择,接下来就等着装机人组装电脑。对于装机人 阅读全文
posted @ 2013-11-12 11:13 烧点饭 阅读(1364) 评论(1) 推荐(0) 编辑
摘要: 前面一篇已经说了简单工厂,那就趁热打铁,开始讲述工厂方法吧。一、引出模式开发场景:实现一个导出数据的应用框架,让客户来选择导出数据的方式,并执行真正的数据导出。导出数据的方式可以是导出到文本文件,导出到XML,导出到Excel,导出到数据库等。好了,我们大概来想一下思路,对于上面的应用框架,导出来的... 阅读全文
posted @ 2013-11-07 14:12 烧点饭 阅读(1357) 评论(2) 推荐(1) 编辑
摘要: 学习GOF23种设计模式,从学习简单工厂开始是个不错的选择,简单工厂虽不属于GOF设计模式中的一种,但它在开发中是非常常用的,也充分体现了面向对象开发的要点和好处,所以理解简单工厂,对于后面学习其它的模式是非常有帮助的。一、引出模式我们时常听说面向对象开发很厉害,所以在开发中我们会时不时尝试用面向对... 阅读全文
posted @ 2013-11-04 15:02 烧点饭 阅读(1548) 评论(0) 推荐(3) 编辑
摘要: 本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition)。1.泛化关系泛化关系是继承或实现的关系,是is a关系,具体表现为类与类的继承,接口与接口的继... 阅读全文
posted @ 2013-10-31 17:03 烧点饭 阅读(13437) 评论(9) 推荐(6) 编辑
摘要: 1.动态脚本当网站需求变大,脚本的需求也逐步变大。我们就不得不引入太多的JS 脚本而降低了整站的性能,所以就出现了动态脚本的概念,在适时的时候加载相应的脚本。比如:我们想在需要检测浏览器的时候,再引入检测文件。1234567891011var flag = true; //设置true 再加载 if (flag) { loadScript('browserdetect.js'); //设置加载的j... 阅读全文
posted @ 2013-06-07 12:49 烧点饭 阅读(2058) 评论(1) 推荐(0) 编辑
摘要: 访问元素的标签名1234<div id="myDiv">text</div> var div=getElementById("myDiv"); alert(div.tagName); //"DIV",HTML中标签名是大写的1.HTML元素略2.取得特性123var div=document.getElmentById("myDiv"); alert(div.getAttribute("id"))... 阅读全文
posted @ 2013-06-07 12:38 烧点饭 阅读(2839) 评论(0) 推荐(0) 编辑
摘要: JavaScript通过document类型表示文档。在浏览器中,document对象是HTMLDocument的一个实例,表示整个HTML页面。document对象是window对象的一个属性。Document特征:nodetype的值为9 nodename的值为"#document" nodevalue的值为null parentnode的值为null ownerDocument的值为null... 阅读全文
posted @ 2013-06-07 12:37 烧点饭 阅读(3501) 评论(2) 推荐(0) 编辑
摘要: History 对象History 对象包含用户(在浏览器窗口中)访问过的 URL。History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问。注释:没有应用于 History 对象的公开标准,不过所有浏览器都支持该对象。IE:Internet Explorer,F:Firefox,O:Opera.History 对象属性属性描述IEFOlength返回浏览器历史列表中的 URL 数量。419History 对象方法方法描述IEFOback()加载 history 列表中的前一个 URL。419forward()加载 history 列表中的下一 阅读全文
posted @ 2013-06-05 12:04 烧点饭 阅读(1376) 评论(0) 推荐(0) 编辑
摘要: Screen 对象Screen 对象包含有关客户端显示屏幕的信息。注释:没有应用于 screen 对象的公开标准,不过所有浏览器都支持该对象。IE:Internet Explorer,F:Firefox,O:Opera.Screen 对象属性属性描述IEFOavailHeight返回显示屏幕的高度 (除 Windows 任务栏之外)。419availWidth返回显示屏幕的宽度 (除 Windows 任务栏之外)。419bufferDepth设置或返回调色板的比特深度。4NoNocolorDepth返回目标设备或缓冲器上的调色板的比特深度。419deviceXDPI返回显示屏幕的每英寸水平点数 阅读全文
posted @ 2013-06-05 12:03 烧点饭 阅读(358) 评论(0) 推荐(0) 编辑
摘要: locarion对象提供了与当前窗口中加载的文档有关的信息。还提供了一些导航功能。location对象就是window对象的属性,又是document对象的属性。Location对象属性属性描述IEFOhash设置或返回从井号(#)开始的URL(锚)。419host设置或返回主机名和当前URL的端口号。419hostname设置或返回当前URL的主机名。419href设置或返回完整的URL。419pathname设置或返回当前URL的路径部分。419port设置或返回当前URL的端口号。419protocol设置或返回当前URL的协议。419search设置或返回从问号(?)开始的URL(查询 阅读全文
posted @ 2013-06-05 12:03 烧点饭 阅读(1240) 评论(0) 推荐(0) 编辑