设计模式之C#实现(四)---- ProtoType之一(转)
该模式的意图是:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。那么首先我们应该已经有了一个对象,同时这个对象还支持自我复制(科隆)。在FCL里面我们知道有一个接口专门用来规定这么一个契约,那就是ICloneable接口,该接口只有一个方法Clone,以下MSDN对该接口中对该接口的方法的说明:创建作为当前实例副本的新对象。Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有顶级对象是重复的,并且顶级以下的对象包含引用。结果克隆必须与原始实例具有相
设计模式之C#实现(一)--AbstractFactory之三(转)
GOF书中的例子用C#实现的源码: using System; namespace AbstractFactory_Maze{ using Maze; public interface AbstractFactory{ MazeClass MakeMaze(); Wall MakeWall(); Room MakeRoom(int n); Door MakeDoor(Room oneRoom,Room otherRoom); } public class MazeFactory : AbstractFactory{ public MazeClass MakeMaze(){ return new MazeClass(); } public Wall MakeWall(){ return new Wall(); } public Room MakeRoom(int n){ return n
设计模式之C#实现(一)--AbstractFactory之五(转)
namespace Maze{ using System.Collections; public class MapSite{ public virtual void Enter(){} } public enum Direction {North,South,East,West} public class Room : MapSite{ public string Print(){ string result = ""; for(int i = 0 ;i<=3;i++){ switch(i){ case (int)Direction.East:{ result += "East is:"+this.GetSide(Direction.East)+" "; break; } case (int)Direction.North:{ result += "No
设计模式之C#实现(一)--AbstractFactory之二(转)
public class ProductA2 : IAbstractProductA{ public ProductA2(){} public string ShowSelf(){ return this.ToString(); } public string ShowOther(IAbstractProductB b){ return b.ToString(); } } public interface IAbstractProductB{ string ShowSelf(); string ShowOther(IAbstractProductA a); } public class ProductB1 : IAbstractProductB{ public string ShowSelf(){ return this.ToString(); } public string ShowOther(IAbstractProductA a){
设计模式之C#实现(一)--AbstractFactory之一(转)
Abstract Factory 读书笔记 意图: 为创建相关的或者相互依赖的对象配置一个借口而不指定他们具体的类。 别名: Kit 理解: 抽象工厂是一种创建型的模式,它为我们创建对象提供了有效地方法,我们不用直接new对象而是可以为创建对象配置一个接口,该接口定义了如何创建对象的方法。我们还知道抽象工厂创建的对象是一个系列的或者是一族的。该模式的最大特点就是将它的具体创建的任务交给了他的子类也就是具体的类,因此我们将创建对象的时间延迟到了它的子类。我们知道,在设计模式(GOF)的书里说了设计模式是为有一定
C#锐利体验之第五讲 构造器与析构器(转)
构造器 构造器负责类中成员变量(域)的初始化。C#的类有两种构造器:实例构造器和静态构造器。实例构造器负责初始化类中的实例变量,它只有在用户用new关键字为对象分配内存时才被调用。而且作为引用类型的类,其实例化后的对象必然是分配在托管堆(Managed Heap)上。这里的托管的意思是指该内存受.NET的CLR运行时管理。和C++不同的是,C#中的对象不可以分配在栈中,用户只声明对象是不会产生构造器调用的。 实例构造器分为缺省构造器和非缺省构造器。缺省构造器是在一个类没有声明任何构造器的情况下,编译器强制为该类添加的一个无参数
C#锐利体验之第四讲 类与对象(转)
组件编程不是对传统面向对象的抛弃,相反组件编程正是面向对象编程的深化和发展。类作为面向对象的灵魂在C#语言里有着相当广泛深入的应用,很多非常“Sharp”的组件特性甚至都是直接由类包装而成。对类的深度掌握自然是我们“Sharp XP”重要的一环。 类 C#的类是一种对包括数据成员,函数成员和嵌套类型进行封装的数据结构。其中数据成员可以是常量,域。函数成员可以是方法,属性,索引器,事件,操作符,实例构建器,静态构建器,析构器。我们将在“第五讲 构造器与析构器”和“第六讲 域 方法 属性与索引器”对这些成员及其特性作详细的
C#锐利体验之第三讲 Microsoft.NET平台基础构造(转)
抛开Microsoft.NET平台去谈C#是没有意义的,C#之“Sharp”也正在其后端强大的平台。仅仅拘泥于语法层面是体验不了C#的锐利之处的,C#程序很多诡秘之处必须依靠Microsoft.NET平台才能深度的掌握和运用。简单的讲,Microsoft.NET平台是一个建立在开放互联网络协议和标准之上,采用新的工具和服务来满足人们的计算和通信需求的革命性的新型XML Web智能计算服务平台。它允许应用程序在因特网上方便快捷地互相通信,而不必关心使用何种操作系统和编程语言。 从技术层面具体来说,Microsoft.NET平台主要包括两个内核,即通用语言运行时(Common
基于C#的接口基础教程之十一(转)
第七节、覆盖虚接口 有时候我们需要表达一种抽象的东西,它是一些东西的概括,但我们又不能真正的看到它成为一个实体在我们眼前出现,为此面向对象的编程语言便有了抽象类的概念。C#作为一个面向对象的语言,必然也会引入抽象类这一概念。接口和抽象类使您可以创建组件交互的定义。通过接口,可以指定组件必须实现的方法,但不实际指定如何实现方法。抽象类使您可以创建行为的定义,同时提供用于继承类的一些公共实现。对于在组件中实现多态行为,接口和抽象类都是很有用的工具。 一个抽象类必须为类的基本类列表中列出的接口的所
基于C#的接口基础教程之九(转)
C#中不仅支持.Net 平台,而且支持COM平台。为了支持 COM和.Net,C# 包含一种称为属性的独特语言特性。一个属性实际上就是一个 C# 类,它通过修饰源代码来提供元信息。属性使 C# 能够支持特定的技术,如 COM 和 .Net,而不会干扰语言规范本身。C# 提供将COM接口转换为 C#接口的属性类。另一些属性类将 COM类转换为C# 类。执行这些转换不需要任何 IDL 或类工厂。 现在部署的任何COM 组件都可以在接口转换中使用。通常情况下,所需的调整是完全自动进行的。 特别是,可以使用运行时可调用包装 (RCW) 从 .NET 框架访问 COM 组件。此
基于C#的接口基础教程之十(转)
创建 COM 对象 COM coclass 在 C# 中表示为具有无参数构造函数的类。使用 new 运算符创建该类的实例等效于在 C# 中调用 CoCreateInstance。使用以上定义的类,就可以很容易地实例化此类: class MainClass { public static void Main() { FilgraphManager filg = new FilgraphManager(); } } 声明 COM 接口 COM 接口在 C# 中表示为具有 ComImport 和 Guid 属性的接口。它不能在其基接口列表中包含任何接口,而且必须按照方法在 COM 接口中出现的顺序声明接口成员函数。 在 C# 中声明的 COM 接口必须包含其基接口的所有成员
基于C#的接口基础教程之八(转)
第六节、接口转换 C#中不仅支持.Net 平台,而且支持COM平台。为了支持 COM和.Net,C# 包含一种称为属性的独特语言特性。一个属性实际上就是一个 C# 类,它通过修饰源代码来提供元信息。属性使 C# 能够支持特定的技术,如 COM 和 .Net,而不会干扰语言规范本身。C# 提供将COM接口转换为 C#接口的属性类。另一些属性类将 COM类转换为C# 类。执行这些转换不需要任何 IDL 或类工厂。 现在部署的任何COM 组件都可以在接口转换中使用。通常情况下,所需的调整是完全自动进行的。 特别是,可以使用运行时可调用包装 (RCW) 从 .NET
基于C#的接口基础教程之七(转)
第六节、接口转换 C#中不仅支持.Net 平台,而且支持COM平台。为了支持 COM和.Net,C# 包含一种称为属性的独特语言特性。一个属性实际上就是一个 C# 类,它通过修饰源代码来提供元信息。属性使 C# 能够支持特定的技术,如 COM 和 .Net,而不会干扰语言规范本身。C# 提供将COM接口转换为 C#接口的属性类。另一些属性类将 COM类转换为C# 类。执行这些转换不需要任何 IDL 或类工厂。 现在部署的任何COM 组件都可以在接口转换中使用。通常情况下,所需的调整是完全自动进行的。 特别是,可以使用运行时可调用包装 (RCW) 从 .NET
基于C#的接口基础教程之六(转)
对一个接口的继承也就继承了接口的所有成员,上面的例子中接口ITextBox和IListBox都从接口IControl中继承,也就继承了接口IControl的Paint方法。接口IComboBox从接口ITextBox和IListBox中继承,因此它应该继承了接口ITextBox的SetText方法和IListBox的SetItems方法,还有IControl的Paint方法。 一个类继承了所有被它的基本类提供的接口实现程序。 不通过显式的实现一个接口,一个派生类不能用任何方法改变它从它的基本类继承的接口映射。例如,在声明中 interface IControl { void Paint( ); } class Control: IControl { public voi
基于C#的接口基础教程之五(转)
第五节、实现接口 1、显式实现接口成员 为了实现接口,类可以定义显式接口成员执行体(Explicit interface member implementations)。显式接口成员执行体可以是一个方法、一个属性、一个事件或者是一个索引指示器的定义,定义与该成员对应的全权名应保持一致。 using System ; interface ICloneable { object Clone( ) ; } interface IComparable { int CompareTo(object other) ; } class ListEntry: ICloneable, IComparable { object ICloneable.Clone( ) {…} int IComparable.CompareTo(object other) {…} }
基于C#的接口基础教程之四(转)
第四节、访问接口 对接口成员的访问 对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的。如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员。但由于接口支持多继承,在多继承中,如果两个父接口含有同名的成员,这就产生了二义性(这也正是C#中取消了类的多继承机制的原因之一),这时需要进行显式的定义: using System ; interface ISequence { int Count { get; set; } } interface IRing { void Count(int i) ; } interface IRingSequence: ISequence, IRing { } c
基于C#的接口基础教程之三(转)
基接口 一个接口可以从零或多个接口继承,那些被称为这个接口的显式基接口。当一个接口有比零多的显式基接口时,那么在接口的定义中的形式为,接口标识符后面跟着由一个冒号":"和一个用逗号","分开的基接口标识符列表。 接口基: :接口类型列表说明: 1、一个接口的显式基接口必须至少同接口本身一样可访问。例如,在一个公共接口的基接口中指定一个私有或内部的接口是错误的。 2、一个接口直接或间接地从它自己继承是错误的。 3、接口的基接口都是显式
基于C#的接口基础教程之二(转)
第二节 定义接口 从技术上讲,接口是一组包含了函数型方法的数据结构。通过这组数据结构,客户代码可以调用组件对象的功能。 定义接口的一般形式为: [attributes] [modifiers] interface identifier [:base-list] {interface-body}[;] 说明: 1、attributes(可选):附加的定义性信息。 2、modifiers(可选): 允许使用的修饰符有 new 和四个访问修饰符。分别是:new、public、protected、internal、 private。在一个接口定义中同一修饰符不允许出现多次,new 修饰符只能出
基于C#的接口基础教程之一(转)
第一节 接口慨述 接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。 接口好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引
C# 程序员参考--库教程(转)
本教程展示如何在 C# 中创建和使用库。教程本教程演示如何使用必要的编译器选项创建托管 DLL 文件,以及如何通过客户程序使用该库。示例本示例使用下列模块: DLL 库 (Functions.dll),从以下源文件生成: Factorial.cs:计算并返回某数的阶乘。 DigitCounter.cs:计算所传递的字符串中的数字位数。使用该 DLL 的客户程序 (FunctionTest.exe),从源文件 FunctionClient.cs 进行编译。本程序显示输入参数的阶乘。生成库若要生成该库,请将 Functions 作为当前目录,并在命令提示处键入下列内容:csc /target:library /out:Functions.dll Fa