初始的设计思路
摘要:我们把那个底盘称为Board,该Board类实一个容器,是一个6*6(n*n)的棋盘。对于该棋盘,我们抽象的看,那是不是一个表格呢? 所以我设想,这个Board类从我们的Table类继承,该Board类负责对底盘中的所有容器的控制。Board类应该封装一个6*6(n*n)的棋盘的事实(细节),然后应该提供一个AddDevice(obj,x,y)的方法,x和y很显然,就是设备要放置的位置,这个obj...
阅读全文
posted @
2007-02-25 21:56
害羞的狮子王
阅读(286)
推荐(0)
委托,语言级别的设计模式
摘要:我们有个发票类,需要提供一个打印的方法,客户告诉我们,这个订单要提供多种打印的样式,那么我们一般会这样设计 1 public enum CommercialInvoiceMode//商业发票样式 2 { 3 Duplicate, //一式两份 4 Triplicate, //一式三份 5 Quadruplicate, //一式四份 6 ...
阅读全文
posted @
2007-02-23 20:10
害羞的狮子王
阅读(513)
推荐(1)
得到一个空值
摘要:也许你感觉到制造一个空值(null)是一个不值一提的话题看看以下代码 1 public class Check//支票2 {3 public string Signing;4 public double Money; 5 } Check的实例在没有给Signing和Money赋值前,Signing和Money是什么值呢?输出胜于雄辩 1 ...
阅读全文
posted @
2007-02-22 14:24
害羞的狮子王
阅读(293)
推荐(0)
DateTime有默认构造函数吗?
摘要:不知道你看到这个题目会不会很郁闷,但这的确是一个很值得考虑的问题。你当然会说,这有啥,代码运行一下不就知道啦。 1DateTime d = new DateTime(); 编译虽然通过,但我们要考虑一下,这个d目前是什么值呢?这就是一个很很值得考虑的问题。 我们知道,如果要声明一个DateTime新实例初始化为指定的年、月和日使用如下的代码 1DateTime d = new DateTime(2...
阅读全文
posted @
2007-02-22 11:19
害羞的狮子王
阅读(895)
推荐(0)
正则表达式的初体验:分析字符串数据
摘要:在程序中,对于数据的分析是非常重要及常见的。对于字符串数据的分析,往往就是对字符串的内容提取,捕获和替换。除非你要做的分析是简单的要求,否则你就不要再使用string的IndexOf、LastIndexOf、StartsWith 和 EndsWith 方法了,而是应该改用正则表达式搜索字符串。 正则表达式虽然学习起来非常的另人头痛和难过,但他也实在是非常的有效。 .NET Fr...
阅读全文
posted @
2007-02-16 22:08
害羞的狮子王
阅读(394)
推荐(0)
泛型来了
摘要:在数组和集合中,我们介绍了一个简单实用的可变长数组ArrayList。这个类可以动态的扩充和收缩集合的长度,用起来非常的方便。但ArrayList有一个不好的地方,就是该类是弱类型,什么乱七八糟的数据类型都可以通通放入一个ArrayList的实例中。为了解决这个问题,我们使用继承来建立一个自己的强类型类。那么,对于这个继承方案有什么不足的地方吗?有人说,为了实现一个强类型类,要写这么多代码,不爽,...
阅读全文
posted @
2007-02-16 22:01
害羞的狮子王
阅读(321)
推荐(0)
数据的格式化
摘要:数据的格式化,其实就是数据类型到字符串的数据转换,只不过,这种转换的级别更加高。 .NET Framework 提供了一种一致、灵活而且全面的方式,使您能够将任何数值、枚举以及日期和时间等基数据类型表示为字符串。格式化由格式说明符字符的字符串控制,该字符串指示如何表示基类型值。 除了对于数据格式的显示提供了方法,.NET Framework 还使用区域性设置,以便用适合于特定区...
阅读全文
posted @
2007-02-16 21:53
害羞的狮子王
阅读(296)
推荐(0)
我,只关心接口
摘要:我们去饭店吃饭,坐下。然后叫:服务员!好,服务员来了。你会说:倒茶。或说:点菜。是吧。你不会说:来,我们讨论一下什么是面向对象吧。这是为什么呢?很简单,对你(顾客)而言,你并不关心来的是男是女,不管他是不是上知天文下知地理,文能安邦物能定国,你只要知道,来的人一定具有点菜这个业务能力。从代码来看, 1 public interface IOrder//点菜 2 { 3 ...
阅读全文
posted @
2007-02-16 21:36
害羞的狮子王
阅读(328)
推荐(0)
从抽象类到接口
摘要:假设有以下的类 1 public abstract class GunBase//枪械 2 { 3 public abstract void Shoot();//射击 4 public abstract ClipMode Clip//配置弹夹 5 { 6 set; 7 get; 8 }...
阅读全文
posted @
2007-02-16 12:05
害羞的狮子王
阅读(546)
推荐(0)
集合遍历:for VS foreach
摘要:假设我们拥有下面的集合 1 System.Collections.ArrayList list = new System.Collections.ArrayList();2 list.Add(1);3 list.Add(12);4 list.Add(3);5 list.Add(56);...
阅读全文
posted @
2007-02-15 22:02
害羞的狮子王
阅读(517)
推荐(0)
Table是怎样炼成的:HtmlTable
摘要:昨天我们做的Table具有了Print方法,可以简单的打印数据。现在我需要一个Table,可以把Table中的数据以Html的Table的格式输出。而我只需要重写Print方法 1public class HtmlTable : Table 2 { 3 public HtmlTable(string reportName, ColumnCollection cols) 4 ...
阅读全文
posted @
2007-02-14 20:42
害羞的狮子王
阅读(378)
推荐(0)
为什么要自己写Table
摘要:布尔先生说System.命名空间下有啊,的确BCL提供了System.Data.DataTable,但是一、该Table相当的大,如果我们需要一个轻量级的Table结构的话,用System.Data.DataTable我感觉大材小用。二、从System.Data.DataTable对象所继承的类,完全暴露了System.Data.DataTable(该DataTable的属性方法有很多是publi...
阅读全文
posted @
2007-02-14 20:31
害羞的狮子王
阅读(213)
推荐(0)
Table是怎样炼成的:SaleReport Table的继承者
摘要:有了Table,我们对其继承,实现更符合业务要求的类 1 /**//// 2 /// 描述一个销售报表 3 /// 4 public class SaleReport : Table 5 { 6 7 public SaleReport(string reportName) 8 : base(reportName, new Co...
阅读全文
posted @
2007-02-13 23:20
害羞的狮子王
阅读(409)
推荐(0)
Table是怎样炼成的:Table
摘要:描述一个数据表 1 /**//// 2 /// 描述一个数据表 3 /// 4 public class Table 5 { 6 7 protected Table(string name, ColumnCollection cols) 8 { 9 TableName = name; 10 ...
阅读全文
posted @
2007-02-13 22:56
害羞的狮子王
阅读(394)
推荐(0)
Table是怎样炼成的:Column、ColumnCollection
摘要:描述数据列的类定义 1 /**//// 2 /// 描述数据列 3 /// 4 public class Column 5 { 6 7 8 public Column(string name, Type type) 9 : this(name, type, null)10 {1112 }1314 ...
阅读全文
posted @
2007-02-13 22:50
害羞的狮子王
阅读(628)
推荐(0)
Table是怎样炼成的:Row、RowCollection
摘要:接下来的连续几篇,我们要演练作一个描述通用的二维表,并演示该二维表的继承通途。先定义数据行的状态 1 /**//// 2 /// 数据行的状态 3 /// 4 public enum RowState 5 { 6 /**//// 7 /// 新建状态 8 /// 9 Added,10 /*...
阅读全文
posted @
2007-02-13 22:48
害羞的狮子王
阅读(756)
推荐(0)
弱类型集合和强类型集合
摘要:上次我们看到的StaffCollection和DepartmentCollection都是继承于System.Collections.CollectionBase,那CollectionBase是个怎样的类呢?我们知道数组的定义是:连续分配的内存空间,大小不能被改变,因此如果我们需要一个像单向链表一样可以动态添加元素的数据结构,我们就需要使用集合。 System.Collections.Array...
阅读全文
posted @
2007-02-13 20:15
害羞的狮子王
阅读(802)
推荐(0)
索引器的重载
摘要:1 Company com = new Company(); 2 com.Departments.Add("HR"); 3 com.Departments.Add("Market"); 4 com.Departments.Add("Development"); 5 6 com.Depar...
阅读全文
posted @
2007-02-12 22:22
害羞的狮子王
阅读(487)
推荐(0)
初见继承威力
摘要:我们来描述一个数据结构,一个公司,下有很多部门,一个部门有很多职员。ok,我们先实现职员数据结构 1 public class Staff 2 { 3 //默认为男性 4 public Staff(string name):this(name,Sex.Man) 5 { 6 } 7 public Staff(stri...
阅读全文
posted @
2007-02-12 22:10
害羞的狮子王
阅读(408)
推荐(0)
属性和索引器
摘要:属性是字段向方法的过渡 1public class Person 2 { 3 4 public int age;//直接公开字段,无法控制用户输入非法的值 5 6 7 //Java模式的对Age控制方式,需要两个方法,Get和Set。麻烦麻烦阿! 8 public int GetAge() 9 {10 retur...
阅读全文
posted @
2007-02-12 21:15
害羞的狮子王
阅读(537)
推荐(0)
武侠世界中的:虚拟方法、重写方法、抽象方法
摘要:虚拟方法virtual被修饰为虚拟的方法,实现是可变的,派生类可以重写基类的虚拟方法,也可以不重写基类的虚拟方法 1public class Space 2 { 3 4 public static void Main(string[] args) 5 { 6 7 new Order().Submit();//to default depar...
阅读全文
posted @
2007-02-10 22:08
害羞的狮子王
阅读(478)
推荐(0)
又到综合练习时间:递归
摘要:第1题 10! 1 static int f(int i) 2 { 3 if (i < 2) 4 { 5 return 1; 6 } 7 else 8 { 9 return f(i - 1) * i;...
阅读全文
posted @
2007-02-09 21:26
害羞的狮子王
阅读(526)
推荐(0)
再谈值类型和引用类型
摘要:从概念上说值类型就是变量包含的是具体的值引用类型就是变量包含的是对具体值得引用,就是指针啦。我们通过代码来演示 1 public class Space 2 { 3 4 public static void Main(string[] args) 5 { 6 7 8 int i = 10; 9 int j = i;...
阅读全文
posted @
2007-02-08 20:35
害羞的狮子王
阅读(532)
推荐(0)
特别的构造函数:构造函数的修饰
摘要:构造函数并不一定都是public的,以下的代码是不是另拟感到构造函数的奇特阿? 1 public class Class1//永远无法被实例化的类 2 { 3 //这个类没有可以被外部访问的构造函数 4 private Class1() 5 { 6 } 7 } 8 9 public class Class2//只可以...
阅读全文
posted @
2007-02-07 22:33
害羞的狮子王
阅读(565)
推荐(0)
构造函数的运用,体现类的自我维护
摘要:构造函数有很多用处,巧妙地运用构造函数能提高类的设计安全、合理和封装。下面的类设计的不合理,要求用户在调用18行Pring方法前,先为17行赋值。 1 public class Space 2 { 3 4 public static void Main(string[] args) 5 { 6 7 FilePrint pring = ...
阅读全文
posted @
2007-02-07 21:51
害羞的狮子王
阅读(453)
推荐(0)
构造函数
摘要:构造函数是一种特殊的函数,该函数没有返回值,且名称必须和类的名称一致。更重要的是构造函数不可以被继承。当一个类没有定义任何的构造函数时,编译器会给这个类一个默认的构造函数。默认的构造函数没有参数,且是public访问修饰。构造函数是类最先调用的函数。又被分为实例构造函数和静态构造函数。静态构造函数(也叫类型构造函数):一个类只能有一个静态构造函数。该构造函数没有访问修饰,没有参数。静态构造函数在整...
阅读全文
posted @
2007-02-05 14:04
害羞的狮子王
阅读(348)
推荐(0)
成员修饰:静态和实例成员
摘要:对类的内部数据成员和函数成员都可以用static修饰。如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所...
阅读全文
posted @
2007-02-05 12:05
害羞的狮子王
阅读(290)
推荐(0)
访问修饰符
摘要:前面我们已经看到并运用了访问修饰符,现在我们来进一步的掌握。 类成员支持五种访问修饰 访问不受限制 public(公共的) 访问范围限定于它所属的类或...
阅读全文
posted @
2007-02-02 14:30
害羞的狮子王
阅读(361)
推荐(0)
类的继承关系声明和访问修饰
摘要:类在声明同时可以包含声明继承关系如何没有声明基类,则默认为从object继承明确声明类时,需要描述类的各种约束不可以直接派生的类System.ArraySystem.DelegateSystem.EnumSystem.ValueType派生类和父类可以有同样级别的访问修饰 类的默认声明是内部的,但可以显式声明 1 // 显示声明类为内部类 2 internal class Wareh...
阅读全文
posted @
2007-02-02 14:13
害羞的狮子王
阅读(457)
推荐(0)
抽象类和密封类
摘要:抽象类 abstract 表示类是不完整的 ...
阅读全文
posted @
2007-02-02 13:31
害羞的狮子王
阅读(565)
推荐(0)
进入面向对象的世界:类就是代码,对象是内存。
摘要:从今天开始,我们要逐步的接触和了解面向对象。首先我们先了解一下抽象的意思。我不讨论理论意义上对于抽象的名词解释,我只通过我的理解来描述。 1int i = 7; 这行代码非常非常地简单,但就蕴含着抽象。抽象了什么呢?int抽象了一个4个字节的空间,7抽象了两进制111。 1public class Car2{ 34}56public class Warehouse7{ 89} 看上面的代码,如果你...
阅读全文
posted @
2007-02-01 15:21
害羞的狮子王
阅读(406)
推荐(0)