- 博客(212)
- 收藏
- 关注
原创 自定义的泛型类和泛型约束
自定义的泛型类和泛型约束现在继续考虑Order,在企业中订单有很多种,运输单、出库单、外借单、报关单等等。因此应该把Order作为基类,然后其他订单从该类派生。现在我们再看一下用户业务流程:当不同的用户角色创建了不同的订单,然后系统将这些订单汇总到公司的审计部,当审计通过后,订单将转向各自需要处理的业务部门。为了实现这个方案,我们在Order声明了一个Send方法。1 pu
2007-03-19 16:39:00 2102
原创 初始的设计思路
我们把那个底盘称为Board,该Board类实一个容器,是一个6*6(n*n)的棋盘。对于该棋盘,我们抽象的看,那是不是一个表格呢?所以我设想,这个Board类从我们的Table类继承,该Board类负责对底盘中的所有容器的控制。Board类应该封装一个6*6(n*n)的棋盘的事实(细节),然后应该提供一个AddDevice(obj,x,y)的方法,x和y很显然,就是设备要放置的位置,这
2007-02-25 21:39:00 726
原创 委托,语言级别的设计模式
我们有个发票类,需要提供一个打印的方法,客户告诉我们,这个订单要提供多种打印的样式,那么我们一般会这样设计 1 public enum CommercialInvoiceMode//商业发票样式 2 { 3 Duplicate, //一式两份 4 Triplicate, //一式三份 5 Quadruplicate, //一式四份
2007-02-23 20:39:00 1017
原创 得到一个空值
也许你感觉到制造一个空值(null)是一个不值一提的话题看看以下代码1 public class Check//支票2 {3 public string Signing;4 public double Money; 5 }Check的实例在没有给Signing和Money赋值前,Signing和Money是什么值呢?输出胜于雄辩
2007-02-22 14:39:00 865
原创 DateTime有默认构造函数吗?
不知道你看到这个题目会不会很郁闷,但这的确是一个很值得考虑的问题。你当然会说,这有啥,代码运行一下不就知道啦。1DateTime d = new DateTime();编译虽然通过,但我们要考虑一下,这个d目前是什么值呢?这就是一个很很值得考虑的问题。 我们知道,如果要声明一个DateTime新实例初始化为指定的年、月和日使用如下的代码1DateTime d = new Date
2007-02-22 11:39:00 2463
原创 正则表达式的初体验:分析字符串数据
在程序中,对于数据的分析是非常重要及常见的。对于字符串数据的分析,往往就是对字符串的内容提取,捕获和替换。除非你要做的分析是简单的要求,否则你就不要再使用string的IndexOf、LastIndexOf、StartsWith 和 EndsWith 方法了,而是应该改用正则表达式搜索字符串。 正则表达式虽然学习起来非常的另人头痛和难过,但他也实在是非常的有效。 .NET
2007-02-16 22:39:00 1441
原创 泛型来了
在数组和集合中,我们介绍了一个简单实用的可变长数组ArrayList。这个类可以动态的扩充和收缩集合的长度,用起来非常的方便。但ArrayList有一个不好的地方,就是该类是弱类型,什么乱七八糟的数据类型都可以通通放入一个ArrayList的实例中。为了解决这个问题,我们使用继承来建立一个自己的强类型类。那么,对于这个继承方案有什么不足的地方吗?有人说,为了实现一个强类型类,要写这么多代码,
2007-02-16 22:39:00 883
原创 数据的格式化
数据的格式化,其实就是数据类型到字符串的数据转换,只不过,这种转换的级别更加高。 .NET Framework 提供了一种一致、灵活而且全面的方式,使您能够将任何数值、枚举以及日期和时间等基数据类型表示为字符串。格式化由格式说明符字符的字符串控制,该字符串指示如何表示基类型值。 除了对于数据格式的显示提供了方法,.NET Framework 还使用区域性设置,以便用适合于
2007-02-16 21:39:00 876
原创 我,只关心接口
我们去饭店吃饭,坐下。然后叫:服务员!好,服务员来了。你会说:倒茶。或说:点菜。是吧。你不会说:来,我们讨论一下什么是面向对象吧。这是为什么呢?很简单,对你(顾客)而言,你并不关心来的是男是女,不管他是不是上知天文下知地理,文能安邦物能定国,你只要知道,来的人一定具有点菜这个业务能力。从代码来看, 1 public interface IOrder//点菜 2 { 3
2007-02-16 21:39:00 697
原创 从抽象类到接口
假设有以下的类 1 public abstract class GunBase//枪械 2 { 3 public abstract void Shoot();//射击 4 public abstract ClipMode Clip//配置弹夹 5 { 6 set; 7 get; 8
2007-02-16 12:39:00 922
原创 集合遍历: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
2007-02-15 22:39:00 1927
原创 为什么要自己写Table
布尔先生说System.命名空间下有啊,的确BCL提供了System.Data.DataTable,但是一、该Table相当的大,如果我们需要一个轻量级的Table结构的话,用System.Data.DataTable我感觉大材小用。二、从System.Data.DataTable对象所继承的类,完全暴露了System.Data.DataTable(该DataTable的属性方法有很多是pu
2007-02-14 20:40:00 757
原创 Table是怎样炼成的:HtmlTable
昨天我们做的Table具有了Print方法,可以简单的打印数据。现在我需要一个Table,可以把Table中的数据以Html的Table的格式输出。而我只需要重写Print方法 1public class HtmlTable : Table 2 { 3 public HtmlTable(string reportName, ColumnCollection cols)
2007-02-14 20:39:00 1073
原创 Table是怎样炼成的:SaleReport Table的继承者
有了Table,我们对其继承,实现更符合业务要求的类 1 /**//// 2 /// 描述一个销售报表 3 /// 4 public class SaleReport : Table 5 { 6 7 public SaleReport(string reportName) 8 : base(reportName, ne
2007-02-13 23:40:00 747
原创 Table是怎样炼成的:Table
描述一个数据表 1 /**//// 2 /// 描述一个数据表 3 /// 4 public class Table 5 { 6 7 protected Table(string name, ColumnCollection cols) 8 { 9 TableName = name; 1
2007-02-13 22:40:00 754
原创 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 }13
2007-02-13 22:40:00 962
原创 Table是怎样炼成的:Row、RowCollection
接下来的连续几篇,我们要演练作一个描述通用的二维表,并演示该二维表的继承通途。先定义数据行的状态 1 /**//// 2 /// 数据行的状态 3 /// 4 public enum RowState 5 { 6 /**//// 7 /// 新建状态 8 /// 9 Added,10
2007-02-13 22:40:00 1059
原创 弱类型集合和强类型集合
上次我们看到的StaffCollection和DepartmentCollection都是继承于System.Collections.CollectionBase,那CollectionBase是个怎样的类呢?我们知道数组的定义是:连续分配的内存空间,大小不能被改变,因此如果我们需要一个像单向链表一样可以动态添加元素的数据结构,我们就需要使用集合。System.Collections.A
2007-02-13 20:40:00 5529 1
原创 索引器的重载
1 Company com = new Company(); 2 com.Departments.Add("HR"); 3 com.Departments.Add("Market"); 4 com.Departments.Add("Development"); 5 6 com.De
2007-02-12 22:40:00 1619
原创 初见继承威力
我们来描述一个数据结构,一个公司,下有很多部门,一个部门有很多职员。ok,我们先实现职员数据结构 1 public class Staff 2 { 3 //默认为男性 4 public Staff(string name):this(name,Sex.Man) 5 { 6 } 7 public Staff(
2007-02-12 22:40:00 759
原创 属性和索引器
属性是字段向方法的过渡 1public class Person 2 { 3 4 public int age;//直接公开字段,无法控制用户输入非法的值 5 6 7 //Java模式的对Age控制方式,需要两个方法,Get和Set。麻烦麻烦阿! 8 public int GetAge() 9 {10 r
2007-02-12 21:40:00 841
原创 武侠世界中的:虚拟方法、重写方法、抽象方法
虚拟方法virtual被修饰为虚拟的方法,实现是可变的,派生类可以重写基类的虚拟方法,也可以不重写基类的虚拟方法 1public class Space 2 { 3 4 public static void Main(string[] args) 5 { 6 7 new Order().Submit();//to default d
2007-02-10 22:40:00 779
原创 又到综合练习时间:递归
第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) *
2007-02-09 21:40:00 927
原创 再谈值类型和引用类型
从概念上说值类型就是变量包含的是具体的值引用类型就是变量包含的是对具体值得引用,就是指针啦。我们通过代码来演示 1 public class Space 2 { 3 4 public static void Main(string[] args) 5 { 6 7 8 int i = 10; 9 int j
2007-02-08 20:40:00 670
原创 特别的构造函数:构造函数的修饰
构造函数并不一定都是public的,以下的代码是不是另拟感到构造函数的奇特阿? 1 public class Class1//永远无法被实例化的类 2 { 3 //这个类没有可以被外部访问的构造函数 4 private Class1() 5 { 6 } 7 } 8 9 public class Class2/
2007-02-07 22:40:00 760
原创 构造函数的运用,体现类的自我维护
构造函数有很多用处,巧妙地运用构造函数能提高类的设计安全、合理和封装。下面的类设计的不合理,要求用户在调用18行Pring方法前,先为17行赋值。 1 public class Space 2 { 3 4 public static void Main(string[] args) 5 { 6 7 FilePrint prin
2007-02-07 21:40:00 487
原创 构造函数
构造函数是一种特殊的函数,该函数没有返回值,且名称必须和类的名称一致。更重要的是构造函数不可以被继承。当一个类没有定义任何的构造函数时,编译器会给这个类一个默认的构造函数。默认的构造函数没有参数,且是public访问修饰。构造函数是类最先调用的函数。又被分为实例构造函数和静态构造函数。静态构造函数(也叫类型构造函数):一个类只能有一个静态构造函数。该构造函数没有访问修饰,没有参数。静态构造函
2007-02-05 14:40:00 625
原创 成员修饰:静态和实例成员
对类的内部数据成员和函数成员都可以用static修饰。如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样
2007-02-05 12:40:00 753
原创 类的继承关系声明和访问修饰
类在声明同时可以包含声明继承关系如何没有声明基类,则默认为从object继承明确声明类时,需要描述类的各种约束不可以直接派生的类System.ArraySystem.DelegateSystem.EnumSystem.ValueType派生类和父类可以有同样级别的访问修饰类的默认声明是内部的,但可以显式声明 1 // 显示声明类为内部类 2 internal class
2007-02-02 14:40:00 1328
原创 进入面向对象的世界:类就是代码,对象是内存。
从今天开始,我们要逐步的接触和了解面向对象。首先我们先了解一下抽象的意思。我不讨论理论意义上对于抽象的名词解释,我只通过我的理解来描述。1int i = 7;这行代码非常非常地简单,但就蕴含着抽象。抽象了什么呢?int抽象了一个4个字节的空间,7抽象了两进制111。1public class Car2{ 34}56public class Warehouse7{ 89}看上面
2007-02-01 15:41:00 716
原创 综合练习:双排月历
将两个月历并排打印如果你可以独立完成,那说明你对编程已经有了一定的控制能力了 1public static void Main(string[] args) 2 { 3 4 5 System.DateTime dt1 = new System.DateTime(2004, 1, 1); 6 System.DateTim
2007-01-31 14:41:00 665
原创 综合练习:宋词排列
苏轼有词念奴娇 赤壁怀古 大江东去 浪淘尽 千古风流人物 故垒西边 人道是 三国周郎赤壁 乱石穿空 惊涛拍岸 卷起千堆雪 江山如画 一时多少豪杰 遥想公瑾当年 小乔初嫁了 雄姿英发 羽扇纶巾 谈笑间 樯橹灰飞烟灭 故国神游 多情应笑我 早生华发 人生如梦 一尊还酹江月将该词按传统直列的方式输出 1 string[] body = ("念奴娇 赤壁怀古 大江东去 浪淘
2007-01-31 11:41:00 807
原创 综合练习:唐诗排列
李白有唐诗《早发白帝城》“朝辞白帝彩云间千里江陵一日还两岸猿声啼不住轻舟已过万重山”将该诗按传统直列的方式输出轻两千朝舟岸里辞已猿江白过声陵帝万啼一彩重不日云山住还间 1 char[] c = 2 "朝辞白帝彩云间千里江陵一日还两岸猿声啼不住轻舟已过万重山".ToCharArray(); 3 4 for (int i =
2007-01-31 11:41:00 917
原创 算法练习:水仙花数、完全数、相亲数
输出所有水仙花数一个三位数,每位的立方之和为其数本身 1 for (int i = 100; i 999; i++) 2 { 3 4 if (Math.Pow(i / 100, 3) + 5 Math.Pow((i / 10) - (i / 100) * 10, 3)
2007-01-31 11:41:00 1854
原创 综合练习:打字练习
写一个“打字练习程序”,要求以下功能按用户的练习从1级开始到10级随机的出现A-Z,a-z出现字符的长度和等级数相符用户输入对得1分,错分数清0每级为10分当等级到11级或用户输入Exit则程序结束 1 int level = 1; int result = 0; 2 System.Console.Write("欢迎使用打字练习程序,按回车键开
2007-01-31 11:41:00 688
原创 随机数生成器
伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了。 1 Byte[] k = new Byte[10]; 2 System.Random r = new Random(); 3 4 //用随机数填充指定字节数组的元素
2007-01-31 11:41:00 643
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人