- 博客(41)
- 收藏
- 关注
原创 多线程
Threads are responsible for multitasking within a single application.You may never need to manage threads explicitly,because the CLR abstracts much of the thread support into classes that simplify most threading tasks.Even if you don`t create your own thr
2011-05-31 18:29:00 437
原创 C#用字符串触发事件
接口可以声明事件,实现接口的时候写法如下:要再写一遍,并加上public关键字。public delegate void Func(); public interface B { event Func ff; } public class CC : B { public event Func ff; }事件在声明的类当中,是当做委托来看待的,它和委托拥有完全一样的方法和属性。但是事件在外部,基本什么也不能做,仅能+=和-=注册和取消
2011-05-30 21:21:00 2062
原创 继承的一些问题
<br /> class Program { static void Main(string[] args) { Derive derive = new Derive(); derive.fun(); } } public class Data { int a; public Data() {
2011-05-30 16:31:00 387
原创 属性和反射
Metadata is information about the data that is information about the types ,code, assembly and so forth stored along with the program.Attributes are a mechanism for adding metadata,such as compiler instructions and other data about your data,methods and cl
2011-05-29 20:35:00 798 1
原创 流(2)--流
BinaryReader,BinaryWriter--可以看见它的方法Writer的方法主要有--Seek主要用来选取插入的位置,Write方法重载了写入bool,decimal,double,float,int,long,sbyte,short,string,unit,ulong,ushort,byte,byte[],char,char[]的方法。可以看见其中的几个方法--PeekChar,Read,Readxxx,对于byte和char有Readxxxs。Readxxx和Readxxxs行为基本一致,读
2011-05-28 23:53:00 573
原创 流(1)--文件
For many applications,data is held in memory and accessed as if it were a three-dimensional solid;when you need to access a variable or an object ,use its name and it is available to you.When you want to move your data into or out a file,across the network
2011-05-27 20:52:00 525
原创 C# 4.0
<br />1.方法默认参数,that optional parameters must appear after all required parameters,且值在编译时确定<br />public void fun(string a, string b = "xuxu"){ }<br />2.named parameters--With named parameters it is possible for the caller to explicitly identify t
2011-05-25 10:10:00 482
原创 获取Type的方式
<br />string的clone方法返回的是原string的引用,这是为什么呢?因为string是不可变的,clone保证的是两个对象是状态独立的,一个对象状态的改变不会影响到另外一个对象,而string是状态不可变的,所以直接返回引用没有问题。<br />返回Type的方法:<br />namespace ConsoleApplication7{ class Program { static void Main(string[] args)
2011-05-23 14:54:00 598
原创 组合模式
<br />解决整体与部分可以一致对待的问题。<br />组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。<br />当需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一使用组合结构中的所有对象时,考虑使用组合模式。组合模式定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合为更复杂的组合对象,组合对象可以被组合,这样不断的递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象了。用
2011-05-22 23:14:00 453
原创 享元模式
<br />享元模式:运用共享技术有效地支持大量细粒度的对象<br /><br />其中factory持有flyweight的方式可以多样,既可以一开始生成,也可以在请求flyweight的时候如果没有,则动态生成。我们主要关注共享的flyweight,不怎么关注不共享的flyweight。<br />另外,我们要决定哪些是共享的那些是不共享的。在享元内部不会随环境改变而改变的共享部分,称为享元对象的内部状态,而随环境改变而改变的,不可以共享的状态就是外部状态。享元模式可以避免大量非常相似类的开销。在程序设
2011-05-22 22:42:00 435
原创 中介者模式
软件当中,对象之间要互相发生关系,这就要求对象之间需要彼此知道其他对象,尽管将一个系统分割成许多对象通常可以增加其复用性,但是对象之间相互连接的激增又会降低其复用性。因为大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统行为进行任何较大的改动就十分困难了。所以为了解决这样的问题,我们应用迪米特法则。如果两个类不直接通讯,这两个类不应发生直接的相互作用,如果一个类要调用另一个类得方法的话,可以通过第三者转发这个调用。将系统的网状结构转变为以中介者为中心的星形结构
2011-05-22 20:29:00 415
原创 桥接模式
<br />其实这个模式是“尽量使用合成/聚合,尽量不要使用类继承”原则的体现。<br />桥接模式:将抽象部分与它的实现部分分离,使他们都可以独立的变化。其实就是对于可能有多角度分类的系统,每一种分类都有可能变化,那么就要把这种多角度分离出来让它们独立变化,减少它们之间的耦合。也就是说,在发现我们需要多角度去分类实现对象,只用继承会造成大量的类增加,不能满足开放-封闭原则,就该考虑使用桥接模式了。<br /><br />这个图上,我们发现两个继承层次,其实都是用来抽象解耦用的。而中间那座桥就是使用聚合而不
2011-05-22 18:19:00 376
原创 命令模式
行为请求者和行为实现者之间一般来说是存在紧耦合关系的。这什么意思呢?也就是说,一般我们想用一个行为,是通过在一个类里面调用另一个类的方法来实现,这很正常,一般情况下没什么问题,和我们需要一个对象new一个一样,但是遇见特殊场合引入变化可能会出现问题,只不过不像new对象需求的那么普遍。
2011-05-22 15:44:00 436
原创 委托与事件
暴露对外的事件或者委托实例,如果没有订阅的方法,那么将为null所以要这么写if (onWaterBoiled != null) onWaterBoiled();采用事件而不是委托的好处是:如果采用委托实例,那么外界可以改变这个委托指向的方法。一句话就是破坏了封装性。而且严重的事情是,外界本来获得这个事件或者委托的实例是用来注册,但是一旦采用委托实例来做,那么没有办法阻止外界触发。。
2011-05-22 01:32:00 411
原创 异常
C#中是没有throws关键字的。。finally中如果抛出异常,则无法保证finally能全部执行完毕。finally中不能写return。重新抛出异常:可能抛出同一异常,这样就直接写throw就可以,也可能抛出不同的异常,如果要包含原始异常的信息,要把原异常封装到新异常中,并在新异常的InnerException属性可以访问原异常。
2011-05-22 01:20:00 430
原创 C#结构体
与类的相同点:都有构造方法,属性,方法,字段,操作符,嵌套类型和索引器与类的不同点:不支持继承(但可以实现接口)和析构函数,而且结构是一种值类型。不能有自定义无参构造函数,如果我们不定义构造函数,字段将初始化为默认值,如果我们写了有参构造函数,则必须要在构造函数里面初始化所有的值。 不能初始化字段(如private int num =1;)结构体集合的效率不好,因为集合元素的类型是引用类型的,这样结构装入会有装箱和拆箱操作。[access level] struct name[:接口]{}
2011-05-21 11:48:00 368
原创 操作符重载
<br />class Number { private int val; public Number(int val) { this.val = val; } public static Number operator +(Number lhs, Number rhs) { return new Number(lhs.val + rhs.val); }
2011-05-21 11:10:00 353
原创 NHibernate Hql分页
<br />string hql = @"from Task t where t.CurrentStepsStr like 'Finished' or t.CurrentStepsStr like 'Terminated' order by t.CreatedAt desc"; return _session.CreateQuery(hql).SetFirstResult(skip).SetMaxResults(take).List<Task>();
2011-05-18 15:43:00 1329
原创 params关键字
<br />语法:<br />1.在方法声明中的 params 关键字之后不允许任何其他参数<br />2.并且在方法声明中只允许一个 params 关键字。 <br />3.param后面的参数必须是一个数组<br />因此可见params参数总是在最后的,且前面的总是平常的参数,或者前面没有参数。<br />public static void fun(params int[] array)<br />public static void fun(int param,params int[]
2011-05-17 23:12:00 755
原创 c#的事件
<br />http://www.cnblogs.com/michaelxu/archive/2008/04/02/1134217.html<br />http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html<br />请看这两个人的博客。
2011-05-17 15:54:00 318
原创 职责链模式
职责链模式--使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。发出请求的客户端并不知道这当中的哪一个对象最终处理了这个请求,这样系统的更改可以在不影响客户端的情况下动态的重新组织和分配责任。class Program { static void Main(string[] args) { Handler h1 = new ConcreteHa
2011-05-16 23:14:00 262
原创 访问者模式
class Program { static void Main(string[] args) { Person person = new Person() { Name = "xuxu"}; person.accept(new Happy()); } } class Person { public string Name { get; set; }
2011-05-16 21:37:00 334
原创 单元测试NUnit
<br />从官网上下载NUnit.msi,安装完事就可以了。<br />在vs中新建的项目中加入nunit.framework的引用。<br />class Program { static void Main(string[] args) { Calculator cal = new Calculator(); int result = cal.Add(2, 3); Console
2011-05-16 00:35:00 326
原创 备忘录模式
<br />在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。<br />class Program { static void Main(string[] args) { Originator orig = new Originator() { State = "On"}; CareTaker careTaker = new CareTak
2011-05-15 11:25:00 312
原创 迭代器模式
<br />提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。<br /> <br /> class Program { static void Main(string[] args) { MyArray<int> myArray = new MyArray<int>(); myArray.add(1); IEnumerator<int> enums = m
2011-05-15 10:56:00 236
原创 单例模式
<br />class Program { static void Main(string[] args) { Singleton instance1 = Singleton.GetInstance(); Singleton instance2 = Singleton.GetInstance(); Console.Write(instance1 == instance2);
2011-05-15 10:26:00 268
原创 状态模式
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到不同状态的一系列类当中,就可以把复杂的判断逻辑简化。状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和转换。状态模式通过把各种状态转移逻辑分布到State子类之间,减少相互间的依赖。 class Program {
2011-05-14 23:30:00 314
原创 适配器模式
把一个类得接口转化为希望的接口。class Program { static void Main(string[] args) { Player player = new Traslator("yaoMin"); player.Attack(); } } abstract class Player { protected string _name;
2011-05-14 22:04:00 286
原创 观察者模式
class Program { static void Main(string[] args) { Subject subject = new Subject(); ConcreteObserver1 con1 = new ConcreteObserver1(subject, "con1_instance1"); ConcreteObserver2 con2 = new Con
2011-05-14 21:22:00 265
原创 建造者模式
<br /> <br />class Program { static void Main(string[] args) { Builder builder = new ConcreteBuilder2(); Director director = new Director(builder); director.Build(); builder.getProd
2011-05-14 20:10:00 483
原创 装饰模式
串联,组合功能。动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。看下面的代码,我们有一个Test的fun方法,现在我们想给其添加一些东西,我们可以利用聚合。然后在自己的方法里面调用Test的fun方法。class Test { public void fun() { Console.WriteLine("Hello"); } } class UseTest { public
2011-05-08 21:46:00 354
原创 原型模式
<br />也就是复制。在C#中提供了ICloneable接口。可以方便的实现这个接口。实现浅拷贝可以调用object的protected方法MemberwiseClone来做。<br />class Program { static void Main(string[] args) { Test first = new Test(); Test second = first.Clone() as Test;
2011-05-08 21:05:00 295
原创 动态代理2
<br />现在新的问题来了。倘若接口变成这样,我们想对两个接口都进行计时。那么可以预见到,我们将会为Tank类实现这两个方法,并在代理类中也实现这两个方法,其中在代理方法里面调用Tank的方法。那么计时的语句将会写两遍。如果我们要对别的类进行计时,那么是不是我们也得写一个新的代理呢?<br />interface Moveable { void move(); void fun(); }<br />以上一个代理类,只能为一个接口服务,如果有很多个接口
2011-05-08 20:26:00 344
原创 动态代理1
class Program { static void Main(string[] args) { Tank subject = new Tank(); subject.move(); } } interface Moveable { void move(); } class Tank : Moveable {
2011-05-08 16:35:00 397
原创 代理模式
这个人的文章很好http://www.cnblogs.com/Terrylee/archive/2006/05/18/403382.html代理模式----真实对象的代表,在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途,但是根本上还是利用了其代理对象的服务。class Program { static void Main(string[] args) { Subject subject = new Proxy();
2011-05-08 12:01:00 319
原创 C# 序列化
<br />这个人的文章很好<br />http://www.cnblogs.com/daniel206/archive/2008/01/16/1042123.html<br />class Program { static void Main(string[] args) { List<XuXu> list = new List<XuXu>(); list.Add(new XuXu(){ID=1,Name="
2011-05-06 13:47:00 410
原创 OPC 读写
<br />static void Main(string[] args) { Opc.Da.Server _server = new Opc.Da.Server(new OpcCom.Factory(), new URL("opcda://" + "127.0.0.1" + "/" + "Matrikon.OPC.Simulation.1")); _server.Connect();
2011-05-04 12:40:00 1933
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人