摘要: IntroductionThe recent growth in UI-centric technologies has refueled interest in presentation layer design patterns. One of the most quoted patterns, Model-View-Controller (MVC), is thought to be designed by Trygve Reenskaug, a Norwegian computer engineer, while working on Smalltalk-80 in 1979 [1].
阅读全文
摘要: 在创建用户控件时,我们难免会创建依赖项属性,这样有利于用户控件的灵活性,例如:我写了一个控件MenuButton,这个MenuButton就是为Button写了一个模板,Image用来显示图片,ContentPresenter用来显示文本。我们肯定不是在用户控件中将图片和文字预先设置好,而是通过用户控件属性来设置,在这里说一些额外的话,建议用依赖项属性,因为依赖项属性支持例如:设计器集成、Binding、动画、样式、动态资源等,而属性则不支持的。看以下MenuButton.xaml代码片段:<UserControlx:Class="Jeriffe.SL.App.UserCont
阅读全文
摘要: 我想,现在已经有不少朋友在项目中使用了MVVMLight了吧,如果你正在做WPF,Silverlight,Windows Phone的开发,那么,你有十分必要的理由了解MVVM和MVVMLight。我写这篇文章的目的,是给大家做一个总结,以便更多的朋友了解并掌握MVVM。首先,要说一下MVVM的概念。MVVM严格来说,并不是一种框架,而是一个设计的模式吧。与它有关的设计模式还有MVC (现在广泛用于Web应用中),以及MVP(之前有用过在Windows Forms和WPF中)如果你希望对MVVM有更加感性地认识,我推荐你看下面这篇文章。http://www.codeproject.com/KB
阅读全文
摘要: 以下内容摘自:http://blogs.msdn.com/b/tims/archive/2010/11/02/kung-fu-silverlight-architectural-patterns-and-practices-with-mvvm-and-ria-services.aspxMVVM(Model/View/ViewModel) is an architectural pattern that is well-suited for Silverlight and WPF development. It isa variation of the MVC patternthat origi
阅读全文
摘要: 这篇教程摘自代码工程:http://www.codeproject.com/KB/WPF/WpfMvvmQuickStart.aspxThe BasicsThe biggest thing about WPF is data binding. In short, you have some data, typically in a collection of some sort, and you want to display it to the user. You can 'bind' your XAML to the data.WPF has two parts, the
阅读全文
摘要: C#中Specification模式的实现今天有朋友在问了我这么一个问题:怎么实现OrWhere的功能?我猜测,他的意思是要实现这样的功能:static IEnumerable<int> MorePredicate(IEnumerable<int> source){ return source.OrWhere(i => i > 0); // 或所有的正数}static void Main(string[] args){ var array = Enumerable.Range(-5, 10).ToArray(); var odd = array.Where(
阅读全文
摘要: 将DataGridView数据导出到Excel的方法大家应该都不陌生,无非就是对DataGridView进行行和列的遍历,将数据写入到Excel Workbook中,不过项目中需要添加对Excel的COM引用,这个会受到客户端环境的限制。如果直接将数据以CSV的形式导出就更简单了,CSV是一种简单的以分隔符(如逗号,Tab制表符等)分隔数据的文件,支持用Excel或记事本打开。一般而言,直接将数据导出到CSV文件中速度会比较快,但是如果将数据导出到Excel标准格式的文件中时需要调用COM组件中的对象,因此速度会慢一些,这时考虑在UI中加入一个实时进度条是有必要的。如何在多线程中使用Progr
阅读全文
摘要: 通过C#使Excel数据导入数据库,需要用到微软Office的驱动引擎,这个有两个可供选择: Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。 Jet 引擎大家都很熟悉,可以访问 Office 97-2003,但不能访问 Office 2007。 ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。 另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 ..
阅读全文
摘要: 3.HttpModule我们上面提到HttpApplication就是一个ASP.NET Application的体现,HttpApplication本身并不提供对Request的处理功能,而是通过在不同阶段出发不同的Event。我们能做的只能是根据我们具体的需求将我们的功能代码作为Event Handler注册到需要的HttpApplication Event上面。注册这些Event Handler,我们首先想到的肯定就是直接在HttpApplication对应的Global.asax中定义我们的EventHandler好了。这是最直接的办法,而且Global.asax提供一个简洁的方式是我
阅读全文
摘要: 1.Range.Interior.ColorIndex列表:无色0 19 38 1 20 39白色2 21 40 3 22 41 4 23 42 5 24 43 6 25 44 7 26 45 8 27 46 9 28 47 10 29 48 11 30 49 12 31 50 13 32 51 14 33 52 15 34 53 16 35 54 17 36 55 18 37 562.How to: 解决 Object does not contain a definition for get_Range:在VS2010中调用COM InteropDLL操作Excel通过get_Range.
阅读全文
摘要: 作为一个很典型的设计模式,Singleton模式常常被用来展示设计模式的技巧,并且随着技术的演进,.NET语言和Java都已经把经典《Design Patterns : Elements of Reusable Object-Oriented Software》中所定义的Singleton模式作了完善,例如C#可以通过这样一个非常精简但又很完美的方式实现了一个进程内部线程安全的Singleton模式。C#最经典Singleton模式的实现(Lazy构造方式)publicclassSingleton{privatestaticSingletoninstance;//唯一实例protectedS.
阅读全文
摘要: WCF以其灵活的可扩展架构为开发者提供了方便,其中对行为的扩展或许是应用中最为常见的。自 定义对行为的扩展并不复杂,但仍有许多细节需要注意。 在服务端,一般是对DispatchRuntime和DispatchOperation进行扩展, 扩展点包括了对参数和消息的检查,以及操作调用程序,它们对应的接口分别为 IParameterInspector,IDispatchMessageInspector以及IOperationInvoker。 在客户端,则 是对ClientRuntime和ClientOperation进行扩展,扩展点包括对参数和消息的检查,对应的接口分别为 IParameterIn
阅读全文
摘要: 接上篇数据上下文基类是上下文接口的实现类,其给出了接口的 部分实现,具体的上下文类可以继承自上下文基类上下文基类的代码如下: privateboolisInTransaction=false;privateboolisDirty=false;privateList<ScheduledAction>actions=newList<ScheduledAction>();privateIdentityMapidentityMap=newIdentityMap();protectedabstractIDataMapper<T>GetDataMapper<T&g
阅读全文
摘要: 如下IDataDontext接口所示给出了数据访问层的数据上下文接口:View Code///<summary>///Themainruntimeinterfacebetweentheapplicationandthedataaccesslayer.Thisisthecentral///APItypeabstractingthenotionofapersistenceservice.///</summary>publicinterfaceIDataContext:IDisposable{///<summary>///Reportswhetherthis<
阅读全文
摘要: 一、下载与安装 MVVM Light Toolkit 官网地址:http://mvvmlight.codeplex.com/。 下载后的压缩包内容如下图所示,因为我的开发环境是Visual Studio 2010 旗舰版 + Expression Blend 4,所以用到的就是被选中的四个文件(其余三个文件分别是用于Expression Blend 3、Visual Studio 2008和Visual Studio 2010 Express (Phone edition)的项目模板,这里不再赘述)。 1、Binaries.V3:MVVM Light Toolkit 的核心.dll文件。将其解
阅读全文
摘要: JSON格式不直接支持日期和时间。DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,其中第一个数字 (在提供的示例中为 700000)是 GMT 时区中自 1970 年 1 月 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括“+0500”的部分可选,它指示该时间属于Local 类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为Utc。 修改Person类,添加LastLoginTime: 1: public class Person 2: { 3: public string N
阅读全文
摘要: 枚举基础知识 若要使用以数据协定模型表示的枚举类型,一种方法就是将 DataContractAttribute 属性应用于该类型。然后,必须将 EnumMemberAttribute 属性应用于每个必须在数据协定中包含的成员。 下面的示例演示了两个类。第一个类使用枚举,第二个类定义枚举。[DataContract]publicclassCar{[DataMember]publicstringmodel;[DataMember]publicCarConditionEnumcondition;}[DataContract(Name="CarCondition")]publice
阅读全文
摘要: JSON(JavaScript Object Notiation)是专门为浏览器中的网页上运行的 JavaScript 代码而设计的一种数据格式。它是在 Windows Communication Foundation (WCF) 中创建的 ASP.NET AJAX 服务所使用的默认数据格式 JSON是一种传递对象的语法,对象可以是name/value对,数组和其他对象。 下面是一小段JSON代码:{"skillz":{"web":[{"name":"html","years":"5&
阅读全文
摘要: protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多protobuf-net是Google的protobuf的dotNet实现,目前支持Mono,SilverLight,WCF,WP7 etc。官方地址:http://code.google.com/p/protobuf-net/下来我们构建一个简单的示例程序,1.在官方地址下载最新的类库(目前最新的是:protobuf-net v2 beta r404.zip) 2.建立一个Console Application3.添加类库:protob
阅读全文
摘要: Introduction This article shows you how to serialize a pure .NET object class to a fast binary data in Silverlight. Background Silverlight does not provide pure binary object serialization. Although the DataContractSerializer and the XmlSerializer are nice serialization infra, these classes are base
阅读全文
摘要: C# 语言参考 约束说明T:struct类型参数必须是值类型。 可以指定除 Nullable 以外的任何值类型。 有关更多信息,请参见使用可以为 null 的类型(C# 编程指南)。 T:class类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。T:new()类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。 T:<基类名> 类型参数必须是指定的基类或派生自指定的基类。T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。 T:U为 T 提供的类型参数
阅读全文
摘要: 下载驱动C#驱动的下载地址为:http://github.com/mongodb/mongo-csharp-driver/downloads添加DLL引用新建一个Console C#的项目,添加引用:MongoDB.Bson.dll MongoDB.Driver.dll 示例代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingMongoDB.Bson;usingMongoDB.Driver;namespaceJeriffe.MongoDB{classProgram{static
阅读全文
摘要: 随Visual Studio 2010 CTP亮相的C#4和VB10,虽然在支持语言新特性方面走了相当不一样的两条路:C#着重增加后期绑定和与动态语言相容的若干特性,VB10着重简化语言和提高抽象能力;但是两者都增加了一项功能:泛型类型的协变(covariant)和反变(contravariant)。许多人对其了解可能仅限于增加的in/out关键字,而对其诸多特性有所不知。下面我们就对此进行一些详细的解释,帮助大家正确使用该特性。 背景知识:协变和反变 很多人可能不不能很好地理解这些来自于物理和数学的名词。我们无需去了解他们的数学定义,但是至少应该能分清协变和反变。实际上这个词来源于类型和类型
阅读全文
摘要: 1、数据绑定的问题:当DataGridView的DataSource绑定的为DataTable时,当DataTable的内容发生改变 时,DataGridView中的内容会自动跟随DataTable改变而不用重新绑定数据源;而把List<T>绑定到 DataGridView则不然,当List<T>的内容发生改变是,需要先设置DataGridView的DataSource属性为 new List<T>(),然后再把作过改动的List<T>重新赋于DataGridView的DataSource。(注:不能设 置DataGridView的DataSou
阅读全文
摘要: 之前的文章“浅谈C#中的延迟加载(1)——善用委托”中介绍了三层结构中在Model层对实体类的属性实现延迟加载的方法,该方法利用C#中的委托来实现,最后虽然延迟加载的目的得以实现,但是给客户端(例如UI层)暴露了不必要的属性(一个委托对象,我使用了泛型的Fun类来实现)。这篇文章介绍一种方法来隐藏这个属性,同时又可以达到延迟加载的目的,更重要的是这一切都是在之前的基础上来完成的,不需要改变原来使用到实体类的地方的代码。 按照惯例,我们考虑一下想要我们的代码达到什么效果:首先在Model.Acticle(文章实体类)中的Category属性和原来一样,只在需要的 时候通过调用委托来获取文章所属分
阅读全文
摘要: 啊~~最近的业余时间都用在修改博客上面了,主要是这段时间在网站的留言板上发现很多外国的垃圾广告,于是做了个“IP黑名单”的功能,留言和文章评论也都加了验证码,顺便把后台的代码整理了一下,希望新加的验证码不会对大家留言和发评论造成不便! 上一篇文章讲 到把实体类中需要实现延迟加载的属性声明为virtual,然后继承实体类做一个子类,在子类里面实现该属性,配合使用委托来实现比较完美的延迟加载(原 本的”模型层“依旧保持在最底层用于贯穿三层结构,同时又可以实现在实体类的属性里面访问到比他高层的”数据访问层“)。文章的最后依旧出现杯具,原因是 在对模型的属性实现延迟加载之前,这个属性可能由于我们业务的
阅读全文
摘要: 很久以前就听过“延迟加载”这个东西,不过没有理解是什么意思,现在算是了解一二了,写点文章作为读书笔记,把自己的想法记录一下,希望对初学者帮助,不管是初学者或者高手如果发现文章那里写得不好或者有更好的思路和做法记得告诉我哦^^。文章打算写成两三篇,这个是第一篇。 在三层结构中我们通常会使用多一个叫做“模型层”的东西,这一层中最主要做的事情是把数据库中的表 (或者其他数据源,例如xml或者自己定义的一种数据格式)转成对应的类,例如有一个文章表,这时候在这一层就会有一个文章类;文章类的属性对应着文章表的列,例如文章标题属性对应文章标题列。 实体类和数据表一一对应是最简单的情况,这时候实体类和实体类是
阅读全文
摘要: 之前我谈到,在普通情况下我们可以很轻松地写出过一个代理类,用来处理延迟加载的情况。当时给出了一个很简单的做法,也就是指创建基类,覆盖它的一些属性实现,类似这种:public class LazySomeClass : SomeClass{ public override int SomeID { get { return this.LazySomeID.Value; } set { this.LazySomeID.Value = value; } } public Lazy<int> LazySomeID { get; set; }} 不过我当时也提到,这么做可能够用,但是也有一些
阅读全文
摘要: explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端示例: Codeusing System;using System.Collections.Gene
阅读全文
摘要: C#4.0关于缺省参数的新特性,相信大家都不会陌生。所谓缺省参数,顾名思义,就是在声明方法的某个参数的时候为之指定一个默认值,在调用该方法 的时候如果采用该默认值,你就无须指定该参数。和很多语言层面特性(语法糖)的实现一样,缺省参数也是编译器为我们玩的一个小花招。缺省参数最终体现为两 个特殊的自定义特性OptionalAttribute和DefaultParameterValueAttribute 。 目录 一、缺省参数的用法 二、实现缺省参数的两个特性:OptionalAttribute和DefaultParameterValueAttribute 三、直接通过OptionalAttribu
阅读全文
摘要: 本文为垃圾回收讲座第四篇,也是最后一篇。前三篇(一、二、三)分别介绍了手工管理内存带来的一些问题,一些经典的GC算法以及CLR与JVM在垃圾回收方面的比较。本文将会简单介绍垃圾回收性能调优的话题,以及给大家推荐一些垃圾回收的资料和开源项目。 GC性能调优 无论对于哪方面的调优,数据库调优、网络调优还是垃圾回收调优,其遵循的过程都是一样的:首先要评估现状,当前的状况是什么样的,收集相关的数据; 再次设定一个目标,即我们调优要达到什么目的,而不是盲目的进行调整;然后做一些调优方面的尝试,并对调优的结果进行验证,看看尝试调优的结果如何,最后 再进行一些细微调整。调优的过程不是一蹴而就的,而是我们可能
阅读全文
摘要: 本文为垃圾回收讲座的第三篇,在前面两篇(一、二)文章里介绍了手工管理内存带来的一些问题,以及一些经典的GC算法。本文我们主要关注微软的CLR与JVM垃圾回收器方面的比较。我们知道CLR和JVM都采用了分代式垃圾回收器,而分代式垃圾回收器则基于以下几点假设: 1. 对象越新,其生存期就越短 2. 对象越老,其生存期就越长 3. 对堆的一部分执行GC比对整个堆执行GC要快 CLR和JVM尽管都采用了分代式垃圾回收器,但是它们在很多处理方面都有些不同:分代机制,大对象堆,回收模式,回收算法,寻找存活对象效率等。 分代机制 在CLR中,对象按年龄可以分为三代:第0代、第1代、第2代,如下图所示: 在这
阅读全文
摘要: 本文是关于垃圾回收讲座的第二篇,第一篇为《垃圾回收系列(1):没有GC,世界将会怎样》。 本文主要关注垃圾回收算法。垃圾回收机制,最早出现于世界上第二元老语言Lisp,Jean E. Sammet曾经说过,Lisp语言最长久的共享之一是一个非语言特征,即代表了系统自动处理内存的方法的术语极其技术——垃圾收集 (GC,Garbage Collection)。接下来我们介绍几种经典的垃圾回收算法,这些算法尽管出现于60、70年代,但是现在的CLR、JVM等上面的垃圾回收器,仍然 使用了它们。 引用计数算法 引用计数(Reference Counting)算法是每个对象计算指向它的指针的数量,当有一
阅读全文
摘要: 最近在公司内部做了一次关于垃圾回收的讲座,我打算用几篇文章把讲座的内容整理出来,供大家参考。在开始之前,我们有必要稍微复习一下内存分配的主要方式,大多数主流语言都支持三种内存分配方式: 1. 静态分配:静态变量和全局变量的分配形式 2. 自动分配:在栈中为局部变量分配内存的方法 3. 动态分配:在堆中动态分配内存空间以存储数据的方式 如何管理堆对象的生命周期,正是我们要探讨的话题。从面向对象的角度来看,每个对象的生命周期应该由自己管理,也就是说,作为一个对象,它知道自己 什么时候被创建,什么时候被销毁。然而事实上却不是这样,因为对象之间有相互引用关系,所以对象往往不知道自己什么时候可以宣告死亡
阅读全文
摘要: 简述:构造函数,在类被实例化时,它会被自动调用。 当C#的类被编译后,在IL代码中会出现一个名为.ctor的方法,它就是我们的构造函数,对应C#中的构造函数。且看下面的代码: public class Class1 { private string name; private int age; } 类Class1中没有显示的构造函数,只有两字段,现在用ILDasm.exe打开编译后生成的exe文件,会看到: 可以看到这里有个.ctor,我们没有定义构造函数,但这里却出现了.ctor,这就说明了: 当没有显示定义构造函数时,会自动生成一个构造函数,它没有参数,没有返回值。 那我们来看看这个.ct
阅读全文
摘要: 关于字符串的驻留的机制,对于那些了解它的人肯定会认为很简单,但是我相信会有很大一部分人对它存在迷惑。在开始关于字符串的驻留之前,先给出一个有趣的Sample: Code Snip: staticvoidMain(string[]args) { stringstr1="ABCD1234"; stringstr2="ABCD1234"; stringstr3="ABCD"; stringstr4="1234"; stringstr5="ABCD"+"1234"; stringst
阅读全文
摘要: NET CLR 和 Java VM 都是堆疊式虛擬機器(Stack-Based VM),也就是說,它們的指令集(Instruction Set)都是採用堆疊運算的方式:執行時的資料都是先放在堆疊中,再進行運算。Java VM 有約 200 個指令(Instruction),每個指令都是 1 byte 的 opcode(操作碼),後面接不等數目的參數;.NET CLR 有超過 220 個指令,但是有些指令使用相同的 opcode,所以 opcode 的數目比指令數略少。特別注意,.NET 的 opcode 長度並不固定,大部分的 opcode 長度是 1 byte,少部分是 2 byte。 本文
阅读全文
摘要: Part 1 Introduction Martin Fowler writes: "When you're pulling data in and out of a database, it's important to keep track of what you've changed; otherwise, that data won't be written back into the database. Similarly you have to insert new objects you create and remove any objects you delete."
阅读全文
摘要: memcached是什么?memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。memcached能缓存什么?通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。memcached快么?非常快。memcached使用了libe...
阅读全文
摘要: 虚方法的使用 C#的语法脱胎于C++,因而保留了virtual关键字,可以定义一个虚方法(或虚属性)。一个类的成员被定义为virtual,就意味着它在告诉自己的子类:我准备了一笔遗产,你可以全盘接受,也可以完全拒绝或者修改我的遗嘱。显然,虚方法授予子类的权利甚至大于抽象方法。子类面对抽象方法只有重写(override)的权利,而对于虚方法,它还可以选择完全继承。毫无疑问,虚方法破坏了对象的封装性...
阅读全文
摘要: 原文地址:http://www.cnblogs.com/powertoolsteam/archive/2010/09/09/1822143.html#1913489 在WinForm控件上我们可以看到很多关于键盘消息处理的方法,比如OnKeyDown, OnKeyPress, ProcessCmdKey, ProcessDialogKey,IsInputKey等等,那么这些方法是如何被组织的,每...
阅读全文
摘要: 今天你多态了吗? Do You Polymorphism Today? [0] Written by Allen Lee -1. 目录 -1. 目录 0. 写在前面的话。 0.0 关键字。 0.1 系统要求?! 0.2 如何阅读本文? 1. 图书馆魔术事件簿。 1.0 图书管理员的烦恼。 1.1 魔术棒是如何工作的? 1.2 魔术般真能起作用吗? 1.3 我们在干什么? 1.4...
阅读全文
摘要: Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。 接下来先说说抽象类和接口的区别。 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义 行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统 称,京哈是狗,牧羊犬是狗,那么狗的一般特性,
阅读全文
摘要: 不过这热气是从实在的火里发出来的呢,还是从他的爱情里发出来的呢,他完全不知道。他的一切光彩现在都没有了。这是因为他在旅途中失去了呢,还是悲愁的结果,谁也说不出来。 ——安徒生 摘自《坚定的锡兵》 摘要 1-2-3 翻开那《葵花宝典》,只见页首赫然写着几个大字:“欲练神功,必先自宫”,旁边几行歪歪扭扭的小字,又不知是哪位前辈高人所写:“在...
阅读全文
摘要: 竞赛暂时胜过它的目的,永远如此。对于要建立殖民地的殖民主义者,生活的意义就在于征服。士兵看不起移民,但是,征服的目的不就是要让移民定居下来吗?因 此,在进步的狂热中,我们把人招来修铁路,建工厂,钻油井。但是,我们不是记得很清楚,我们进行的这些建设是服务人类的。……真理,对于一些人来说就是建 造房子,而对于另一些人来说就是居住。 ——圣埃克絮佩里 摘自...
阅读全文
摘要: 猴子抬头道:“我有一个梦,我想我飞起时,那天也让开路,我入海时,水也分成两边,众仙诸神,见我也称兄弟,无忧无虑,天下再无可拘我之物,再无可管我之人,再无我到不了之处,再无我做不成之事,再无我战不胜之物。” ——今何在 摘自《悟空传》 摘要 男程序员勿进。(因为可能女程序员拍砖的力道会小些,俺比较能扛得住……) 并发冲突...
阅读全文
摘要: MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View...
阅读全文
摘要: 为了便于使用SQLite.Net,参照微软企业库中数据组件的写法写了这个类,无非就是为了便于使用。 下面是代码: 代码 usingSystem;usingSystem.Data;usingSystem.Data.Common;usingSystem.Data.SQLite;usingSystem.IO;namespaceIdentifyCode.Data{publicclassDatabase{...
阅读全文
摘要: SQLite 是一个嵌入式的关系数据库系统,使用十分广泛。在一些数据量不大的应用程序中,如果使用SQLite可以极大的减少部署时的工作量。 要在C#中使用SQLite也很简单,只要找一个C#的wrapper就可以了,例如,我使用的就是来自 http://sqlite.phxsoftware.com/ 的一个dll,System.Data.SQLite. 下载下来的文件是SQLite-1.0.65....
阅读全文
摘要: 摘自:http://www.devarticles.com/c/a/C-Sharp/IOCP-Thread-Pooling-in-C-sharp-Part-II/Defining the SolutionWe will build a class that encapsulates a single IOCP thread pool. The application developer will ...
阅读全文
摘要: 摘自:http://www.theukwebdesigncompany.com/articles/iocp-thread-pooling.phpPart One: Introduction When building server based applications in C#, it is important to have the ability to create thread pool...
阅读全文
摘要: 第一段略。。。大多数讲闭包的文章都是说函数式语言,因为它们往往对闭包的支持最完善。当你在使用函数式语言时,很可能已经清楚了解了什么是闭包,所以我想写一篇在经典OO语言出现的闭包有什么用处应该也是很合适的事情。这篇文章我准备讲一下C#(1、2、3)和JAVA(7以前版本)的闭包。什么是闭包?简单来讲,闭包允许你将一些行为封装,将它像一个对象一样传来递去,而且它依然能够访问到原来第一次声明时的上下文。这样可以使控制结构、逻辑操作等从调用细节中分离出来。访问原来上下文的能力是闭包区别一般对象的重要特征,尽管在实现上只是多了一些编译器技巧。利用例子来观察闭包的好处(和实现)会比较容易, 下面大部份内容
阅读全文
摘要: 此文转自代码工程:http://www.codeproject.com/KB/threads/SchedulingEngine.aspxIntroduction This article is the first of a multi-part series that will cover the architecture and implementation of components nee...
阅读全文
摘要: 此文转自代码工程:http://www.codeproject.com/KB/IP/CommLibrary.aspxIntroduction This article is the second of a multi-part series that will cover the architecture and implementation of components needed to cr...
阅读全文
摘要: 原文URL: http://www.cnblogs.com/dlwang2002/archive/2008/09/16/1291793.html1:基于Socket连接; 2:在四个局域网内测试通过; 3:简单模型,需要进一步优化效率和处理; =========================备注: 经过修改和重构,抽象出来的P2PLib已经可以工作了,并且提取出一个Envelope对象,当作通...
阅读全文
摘要: 蛙蛙教你解析网络包 摘要:做网络应用,封包,解包是家常便饭,但如何做到准 确、稳定而且性能好,却不太容易做到,这次和大家分享一下我在解析网络包上的经验。 思路:设计一个网络协议,一般都会分包,一个包就相当于 一个逻辑上的命令。 1、如果我们用udp协议,省事的多,一次会收到一个完整的包,但UDP不可靠,顺序也不能保证,当然像QQ对UDP封装的很好,模拟了TCP的可靠性。 网上也有一些封装好的可靠的...
阅读全文
摘要: 蛙蛙推荐:编写一个服务监控的软件 如果一个服务被部署到了几十台机器上,我们往往需要每天花费很多的时间去查看每台机器上的服务的运行状况,虽然微软有 MOM(Microsoft Operations Manager)和SMS(Systems Management Server),但处于成本上及其它方面的考虑,好多时候我们还用不上这些东西,其实微软公开了好多管理和监控方面的API和工具,比如 WMIC...
阅读全文
摘要: 蛙蛙推荐:改进同步等待的网络服务端应用 摘要:服务端收到客户端的请求,如果该请求的处理依赖另一个服务,而且客户端要求同步返回结果,一般得 把请求的线程等待一个信号,等请求处理完毕再发送一个信号,给客户端返回结果,但如果这样的同步等待请求并发量很大的话,会很快耗费完线程池线程。 思路:ThreadPool的静态方法RegisterWaitForSingleObject是专门 解决这个问题的,它可以等...
阅读全文
摘要: 你可以用几种方法在.NET中编程来生成打印输出结果(如报表)。对Windows程 序员来说,Visual Studio提供的Crystal Reports实际上是人们常用的打印报表的工具,但对不太复杂的报表来说,这个工具就有些大材小用了。当然,你可以用很好的Win32 API调用,但是尽管API可以让你有完 全的控制权,它同时也把你锁定到一个单一的平台上了。如果Microsoft或另外的公司(如...
阅读全文
摘要: 引言 前段时间为客户开发一套打印机配套的软件,对C#中调用打印机做了些研究。 问题 .Net Framework 1.1给我们提供了一个PrinterSettings类, 以提供指定有关文档打印方式的信息,其中包括打印文档的打印机。其中的静态属性InstalledPrinters可 以使我们获取安装在计算机上所有打印机的名称。 但是可惜的是,该属性仅仅能够提供已安装的打印机的名称。对于获取该打印机...
阅读全文
摘要: 原文URL:http://www.cnblogs.com/peterzb/archive/2009/07/04/1516988.html XML在WinForm, Asp.Net, Java, AJAX开发等方面应用, 以及对XML文档基本操作,如XPath检索节点. 当前XML被广泛应用与配置保存, 简单数据存储, 跨平台数据传输, 其身影活跃于Web Services, AJAX开发技术应...
阅读全文
摘要: 原文URL:http://www.cnblogs.com/peterzb/archive/2009/07/12/1522142.html 收集了一些打印方面文章, 包含WinForm, Asp.Net中使用, 有结合Excel/Word, 也有直接使用报表工具打印功能, Web打印采用css结合WebBrowse控件.(文章及相关代码搜集自网络,仅供学习参考,版权属于原作者! ) 01. Win...
阅读全文
摘要: 原文URL:http://www.cnblogs.com/peterzb/archive/2009/07/19/1526555.html UI(User Interface)编程在整个项目开发过程中是个颇为重要的环节,任何好的解决方案若没有良好的用户界面呈现给最终用户,那么就算包含了最先进的技术也 不能算是好程序。UI编程体现在两个方面,一是设计精美的用户界面,再有就是符合大多数用户习惯和易于...
阅读全文
摘要: hashtable里存的对象全部是object类型 ,所有对象存进去都被转成object类型,读取出来每次都需要转换类型,hashtable对存入的类型没有限制 , 因此在读取转换类型时容易出错, dictionary只能存入定义时指定的类型,而且不像hashtable会把类型转换成object,存取起来比前者方便,效率更高,因为 不需要转换类型,所以不会出现hashtable里的转换类型错误...
阅读全文
摘要: 转自:http://www.cnblogs.com/JeffreyZhao/archive/2009/08/10/from-delegate-to-others-3.html在上一篇文章中,我们详细讲述了C# 3.0中Lambda表达式(构造委托)的使用方式,它在语义上的优势及对编程的简化——这些内容已经属于委托的“扩展内容”。不如这次谈得更远一些,...
阅读全文
摘要: 转自:http://www.cnblogs.com/JeffreyZhao/archive/2009/08/07/from-delegate-to-others-2.html#declarative在上一篇文章中我们简单探讨了.NET 1.x和.NET 2.0中委托表现形式的变化,以及.NET 2.0中匿名方法的优势、目的及注意事项。那么现在我们来谈一下.NET 3.5(C# 3.0)中,委托的表...
阅读全文
摘要: 转自:http://www.cnblogs.com/JeffreyZhao/archive/2009/08/05/from-delegate-to-others.html 在《关于最近面试的一点感想》 一文中,Michael同学谈到他在面试时询问对方“delegate在.net framework1.1,2.0,3.5各可以怎么写”这个问题。于是乎,有朋友回复道“...
阅读全文
摘要: 大部分计算机科学和编程的入门课本中都会有一章介绍集合。它们可能被称为数组或数据结构,但概念是相同的。将正式数据对象中的一组元素与另一组元素联系在一起的能力对现代编程技术来说是必需的。 在 Microsoft® .NET Framework 中,付出的很多努力都是为了创建强大的集合类,以满足各种需求及样式。这些集合使用方便、直观,并有足够的性能,这些都是非常重要的特征。在本月的这一期 内容中,我将着眼于 .NET 中的集合、它们的工作原理、使用它们的时机和一些最佳实践。 ...
阅读全文
摘要: WCF中的契约(Contract)在WCF中有4种契约: 服务契约[Service Contracts] 数据契约[Data Contracts] 错位契约[Fault Contracts] 消息契约[Message Contracts]
阅读全文
摘要: 在 .NET Framework 2.0中增加了System.Transactions,这是一种新的命名空间,完全专注于控制事务性行为。引入了执行事务性工作的更简单方法及一些新的 性能优化。System.Transactions提供了一个“轻量级”的、易于使用的Transaction框架。 下面介绍System.Transactions的几种用法。 首先要引用:using...
阅读全文
摘要: 摘要 面向方面的编程(AOP)是一种新的编程技术,它弥补了面向对象的编程(OOP)在跨越模块行为上的不足。AOP引进了Aspect,它将影响多个类的行为封装到一个可重用模块中,它允许程序员对横切关注点进行模块化,从而消除了OOP引起的代码混乱和分散问题,增强了系统的可维护性和代码的重用性。本文分析传统权限控制的实现方法,并研究了在AOP下权限控制的实现方法。 关键词 AOP;横切关注点; 设计模...
阅读全文
摘要: 服务端客户端通信 在与服务端的连接建立以后,我们就可以通过此连接来发送和接收数据。端口与端口之间以流(Stream)的形式传输数据,因为几乎任何对象都可以保 存到流中,所以实际上可以在客户端与服务端之间传输任何类型的数据。对客户端来说,往流中写入数据,即为向服务器传送数据;从流中读取数据,即为从服务端 接收数据。对服务端来说,往流中写入数据,即为向客户端发送数据;从流中读取数据,即为从客户端接收数...
阅读全文
摘要: MSIL,就是大家所熟知的 微软中间语言(Microsoft Intermediate Language)的简称,它是一种介于高级语言和基于Intel的汇编语言的伪汇编语言。当用户编译一个.Net程序时,编译器将源代码翻译成一组可以有效地转换为本机代码且独立于CPU 的指令。当执行这些指令时,实时(JIT)编译器将它们转化为CPU特定的代码。由于公共语言运行库支持多种实时编译器,因此同一段MSIL代码可以被不同的编译器实时编译并运行在不同的结构上。 今天我们就构建一个MSIL版本的HelloWorld:1.在UE中键入如下程序:.assembly HelloWorldIL {}.method.
阅读全文
摘要: 打印字符串 PrintString 就是MSIL版的 Hello, World 在代码中用到的MSIL指令如下: l .entrypoint— 定义程序的入口点(该函数在程序启动的时候由.NET 运行库调用) l .maxstack— 定义函数代码所用堆栈的最大深度。C#编译器可以对每个函数设置准确的值, 在例子中,我把他设为8。 用到的MSIL命令如下: ldstr string—把一个字符串常量装入堆栈。 call function(parameters)—调用静态函数。函数的参数必须在函数调用前装入堆栈。 pop— 取出栈顶的值。当我们不需要把值存入变量时使用。 ret— 从一个函数中返
阅读全文
摘要: Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and Security (ADOX) 是对 ADO 对象和编程模型的扩展。ADOX 包括用于模式创建和修改的对象,以及安全性。由于它是基于对象实现模式操作,所以用户可以编写对各种数据源都能有效运行的代码,而与它们原始语法中的差异无关。
阅读全文