摘要:原型模式就是属性模式,比如一个创建对象时候比较消耗性能,就通过深拷贝一个对象,从而达到一种不创建,当然这种对象一般被频繁的使用才使用这种模式的,也可以通过定义特性达到部分复制
阅读全文
摘要:本文将讲述LINQ的基础查询(此文所有例子都使用LINQ to Object)在此之前,我们先创建一个用于示例的数据源:Student类:表示学生,包括学号、姓名及班级Courses类:表示学生选择的课程,包括学号、课程名称及学时数DataCreator类:静态类,通过GenerateData方法产生示例数据生成的数据如下:学号 姓名 班级 课程名称 学时003 王五 二班 经济学 20003 王五 二班 企业管理 20003 王五 二班 财务管理 30002 李四 一班 历史 20002 李四 一班 政治 20002 李四 一班 语文 30001 张三 一班 数学 20001 张三 一班 语
阅读全文
摘要:LINQ即语言集成查询,是.NET Framework 3.5中新增的功能。其功能类似于数据库中的SQL语句(实际上LINQ就是针对.NET Framework的SQL):提供标准的、易于学习的查询和更新数据模式。从from开始用过SQL的朋友都知道,最简单的SQL语句SELECT record FROM tableName:获取表中的所有记录,那么对应于LINQ,其语法如下:from record in tableName select record。明显的差异是将from语句放到了句首,此种语法方式只是为了适应Visual Studio中智能提示(试想如果将from子句放在后面,先输入se
阅读全文
摘要:Type t = typeof(Program); foreach (PropertyInfo p in t.GetProperties()) { object[] o = p.GetCustomAttributes(true); }哥表示今天比较蛋疼,始终最后没理解这个build加特性的使用到底啥意思怎么用,有何用途,设计模式的思想和精髓还要有待加以多练习
阅读全文
摘要:转自http://www.cnblogs.com/liuxinxin/articles/2265672.htmlC# 特性详解 特性(attribute)是被指定给某一声明的一则附加的声明性信息。在C#中,有一个小的预定义特性集合。在学习如何建立我们自己的定制特性(custom attributes)之前,我们先来看看在我们的代码中如何使用预定义特性。using System; public class AnyClass { [Obsolete("Don't use Old method, use New method", true)] static void Ol
阅读全文
摘要:其实这种设计思想也来源于生活,比如生活中,我们在淘宝上买哥电脑桌,我们要组装它,这类产品都有一个共同点就是会把零件上标好标志1.定义在指导属性创建特性类 /// <summary> /// 指导每个具体类型BuildPart过程目标方法和执行情况的属性 /// </summary> [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] public sealed class BuildStepAttribute : Attribute { int sequence; ...
阅读全文
摘要:public class Vehicle { public IEnumerable<string> Wheels { get; set; } public IEnumerable<string> Lights { get; set; } } /// <summary> /// abstract builder /// </summary> public abstract class VehicleBuilderBase { public Vehicle Vehicle { get; protected se...
阅读全文
摘要:http://blog.csdn.net/zhlyyea/article/details/2114654
阅读全文
摘要:工厂接口定义 /// <summary> /// 工厂接口定义 /// </summary> /// <remarks> /// TTarget : abstract product type /// TSource: concrete product type /// </remarks> public interface IFactory { #region config and register type mapping /// <summary> /// 如果需要同时加载配置文...
阅读全文
摘要:定义一个接口 public interface IFactory { IProduct Create(); // 返回默认的 concrete product IProduct Create(string name); // 按照配置的逻辑名称返回指定的concrete product }获取配置类 public class ProductRegistry { const string SectionName = "concreteProducts"; static NameValueC...
阅读全文
摘要:工厂方法模式就是把该类的实例化过程延迟到子类,将new工作交给工厂完成,同时对工厂自身进行抽象,然后客户端程序基于工厂的抽象行为构造所需的实例类型 /// <summary> /// 抽象产品类型 /// </summary> public interface IProduct { string Name { get;} // 约定的抽象产品所必须具有的特征 } /// <summary> /// 具体产品类型 /// </summary> public class ProductA : IProduct { ...
阅读全文
摘要:你想如果有多个类似的类,我们就需要实例化出来多个类。这样代码管理起来就太复杂了。 这个时候你就可以采用工厂方法来封装这个问题。 public interface IProduct { } public class ConcreteProductA : IProduct { } public class ConcreteProductB : IProduct { } public class Factory { public IProduct Create() { // 工厂决定到底实例化哪个子类。 ...
阅读全文
摘要:关于前两章的一些总结回顾,其实设计模式的精髓在于分离,抽象,简洁,方便,在熟悉一些c#流行语法,加深对事件和代理的理解,以及应用,通过这些手段来分离包装对象,从而达到更好的实现分离抽象,,我想这就是设计模式的精髓所在
阅读全文
摘要:public class Currency { /// <summary> /// 货币代码 /// </summary> public string Code { get; set; } /// <summary> /// 货币名称 /// </summary> public string Name { get; set; } } public interface IDataFacade { /// <summary> /// 根...
阅读全文
摘要:public interface ITimeProvider { DateTime CurrentDate { get; } } public class TimeProvider : ITimeProvider { public DateTime CurrentDate { get { return DateTime.Now; } } } public class Assembler { static Dictionary<Type, Type> dictionary = new Dictionary<Typ...
阅读全文
摘要:特性这个东西哥用的实在太少了,或者有些地方用了自己也不知道,好像在反序列化的地方用过,别的地方用到的很少,博客园里面也有文章说特性,拜读了下,觉得懂了点,但是还是觉得不知道啥时候用,选了一个例子,它代表了我的理解吧,我目前觉得它的用途就是这样using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace A0070_CustomAttributes.Sample{ /// <summary> /// 这个类为其他类定义 附加属性 /// </summary&
阅读全文
摘要:public interface ITimeProvider { DateTime CurrentDate { get; } } public class TimeProvider : ITimeProvider { public DateTime CurrentDate { get { return DateTime.Now; } } } //下面实现这个Assembler public class Assembler { static Dictionary<Type, Type> dictio...
阅读全文
摘要:public interface ITimeProvider { DateTime CurrentDate { get; } } public interface IobjectWithTimeProvider { ITimeProvider TimeProvider { get; set; } } public class TimeProvider : ITimeProvider { public DateTime CurrentDate { get { return DateTime.Now; } } ...
阅读全文
摘要:namespace Setter{ public interface ITimeProvider { DateTime CurrentDate { get; } } public class TimeProvider : ITimeProvider { public DateTime CurrentDate { get { return DateTime.Now; } } } public class Assembler { static Dictionary<Type, Type> dictionary...
阅读全文
摘要:这种方式就是在构造函数时候注入类型直接看例子 public interface ITimeProvider { DateTime CurrentDate { get; } } public class TimeProvider : ITimeProvider { public DateTime CurrentDate { get { return DateTime.Now; } } } public class Assembler { static Dictionary<Type, Type> dictiona...
阅读全文
摘要:定义:开发过程中,如果客户端程序依赖某个对象,我们常常对它进行一次抽象,形成抽象类,接口,这样客户端就可以摆脱锁依赖的具体类型。其实也是里氏替换原则和依赖倒置原则废话不说先看一个例子public interface ITimeProvider { DateTime CurrentDate { get; } } public class TimeProvider : ITimeProvider { public DateTime CurrentDate { get { return DateTime.Now; } } } //客户端...
阅读全文
摘要:我一般写ini,很少直接操作config,以后还是多按照微软的方式来,下次使用心得贴上与大家一起共享,以下来自网络说了对配置文件的修改,基本上都已经是全部了,后来也补充了SingleTagSectionHandler的访问,现在把对SingleTagSectionHandler的写以及一些能偷懒的方法一起说下,希望大家有好东西都能够分享下,有时用到了,就是好东西,不用到就当作是学习吧提供二个访问配置文件的静态方法 /// <summary> /// 打开默认的配置文件.exe.config /// </summary> /// <returns></r
阅读全文
摘要:C# 配置文件读取与修改配置文件在很多情况下都使用到, 配置文件分为两种 一种是应用程序的配置文件, 一种是web的配置文件.两种配置文件最大的区别是web的配置文件更新之后会实时更新, 应用程序的配置文件不会实时更新.更新应用程序的配置文件之后需刷新ConfigurationManager.RefreshSection("appSettings");// 刷新命名节,在下次检索它时将从磁盘重新读取它。ConfigurationSettings也存在这个问题, 但是我还不知道怎么刷新节点, 呵呵.旧方法: 各位看官最好使用下面”新方法”配置文件:<configurat
阅读全文
摘要:直接贴代码,注意里面string.Join这个方法以前没注意,不错,不过4.0才支持ienumber类型,3.5之下运行会报错,看来4.0更加成熟点public class ErrorEntity { IList<string> messages = new List<string>(); public static ErrorEntity operator +(ErrorEntity entity, string message) { entity.messages.Add(message); ret...
阅读全文
摘要:1.where T:a||b 表名该算法适用于实现接口A或接口B的类型2.Where T:A && B 表名该算法使用与同时实现了接口A和接口B的类型待续,改天补上这些知识 attrubt 与操作符重载
阅读全文
摘要:抽象工厂最大限度的让代码重复使用,其实也是设计模式中的模板模式,好了至此我们学习了两种了,一种是接口,一种是抽象工厂,二者结合起来更好,关于前面的代理,数据集扩展还有lanm表达式的一些应用,代理,事件,等应用场合,打码简洁性等,我花一段时间来让自己的知识更加系统化,也算对以前知识的一些总结,和自己认为一些比较重要的例子看代码 public class RowGenericFactroy<T> { public T Create(string typename) { if(string.IsNullOrEmpty(typename)) ...
阅读全文
摘要:同样,在接下来一段时间设计模式暂时先不设计,我先说些我对C#一些相关知识的理解,事件的应用,在真正做开发,特别是多人协作,第三方等那么代理需要人家按照一定的格式来,如果采用事件的话,第三方无需按照格式便可以直接调用,那么是不是更省事,也符合设计模式的开闭原则看代码public class EventMonintor { public static EventHandler<EventArgs> Modify; public static EventHandler<EventArgs> Added; //静态构造函数与一般构造函数区别 ...
阅读全文
摘要:虽然说的是设计模式,但是还是要补充一些知识,虽然基本用法我们都懂,但是个人觉得下面的例子更为精彩直接看代码 public delegate void StringAssignmentEventHandler(); public class InvokeList { List<StringAssignmentEventHandler> handlers; string[] message = new string[3]; public InvokeList() { handlers = new List<S...
阅读全文
摘要:我们设计类的时候一般要遵循一些原则1.单一原则(SRP),每个对象只负责自己的事情,避免重复交叉,这样以后维护起来方便2.里氏替换原则(LSP)和依赖倒置原则(DIP) 就是依赖抽象而非具体从而使软件在以后维护中更加的方便,具体点说就是利用接口和抽象类达到这样的目的比如一个接口 IRun里面定义了一个run()方法,继承的有自行车run汽车run,那么我客户端只需要调用这个接口,run即可,不再跟汽车自行车,这样达到抽象,通用,同样这个例子也适合下面一个法则举一个简单的例子,直接贴代码,相信大家都看得懂 interface Itest { void a(); } ...
阅读全文
摘要:最近在升级软件版本,升级是一件让我非常头疼的事情,里面太过于复杂,每次都得要重新理一次,自己也不得不承认自己的设计不合理,后来读了一些设计模式的文章觉得受益匪浅,设计模式是软件的灵魂所在,精华的总结,很长一段时间自己在看别人源码的时候什么bll,DAL,之类的文件夹,当时很不解为什么要这么做,尽管自己也去用一些比如数据库多支持之类的类,为什么人家用接口,当时觉得自己按照自己的想法,没必要用这些,非常遗憾过了三年自己猜领悟接口与设计模式的重要性,以及为何要用它,今天开始自己记录下自己的每日总结,并把一些经验与大家一起分享,作为一个自学者,相信会引起自学者的共鸣,欢迎大家跟我一起学设计模式,我会.
阅读全文
摘要:http://www.cnblogs.com/peterzb/archive/2009/06/21/1507880.html
阅读全文
摘要:http://www.cnblogs.com/lovecherry/archive/2007/10/17/927728.htmlhttp://www.cnblogs.com/springyangwc/archive/2011/05/05/2038402.htmlhttp://blog.sina.com.cn/s/blog_6ad539a90100kora.htmlhttp://tech.it168.com/msoft/2007-10-29/200710290920859.shtmlhttp://www.cnblogs.com/jirigala/archive/2009/10/14/158339
阅读全文
摘要:在学习HTML Xpath之前呢我们先来下载一下Dll文件下载地址:http://htmlagilitypack.codeplex.com/大家下载单击如下图片下载就行了<ignore_js_op>接下来就是在程序中引用一下,<ignore_js_op>然后就可以直接调用 了,大家看看代码吧普通浏览复制代码//htmlDcoument对象用来访问Html文档sHtmlAgilityPack.HtmlDocumenthd=newHtmlAgilityPack.HtmlDocument();//加载Html文档hd.LoadHtml(strhtml);stringstr=h
阅读全文