Table是怎样炼成的:Table

简介:
描述一个数据表

1   /// <summary>
2 /// 描述一个数据表
3 /// </summary>

4   public   class  Table
5   {
6
7 protected Table(string name, ColumnCollection cols)
8 {
9 TableName = name;
10 Columns = cols;
11 Rows = new RowCollection();
12 }

13
14 /// <summary>
15 /// 获取或设置表的列架构
16 /// </summary>

17 protected readonly ColumnCollection Columns;
18 /// <summary>
19 /// 获取或设置表的数据行
20 /// </summary>

21 protected RowCollection Rows;
22 /// <summary>
23 /// 获取或设置表的名称
24 /// </summary>

25 protected readonly string TableName;
26
27 /// <summary>
28 /// 将该行数据状态改为RowState.Unchanged
29 /// </summary>

30 protected void AcceptChanges()
31 {
32 for (int i = 0; i <= Rows.Count - 1; i++)
33 {
34 Rows[i].AcceptChanges();
35 }

36 }

37
38 /// <summary>
39 /// 移除所有数据行
40 /// </summary>

41 protected void Clear()
42 {
43 this.Rows.Clear();
44 }

45
46 /// <summary>
47 /// 返回状态匹配的数据行,并以新数据表的形式体现
48 /// </summary>
49 /// <param name="rowState"></param>
50 /// <returns></returns>

51 protected Table GetChanges(RowState rowState)
52 {
53 Table tmpTable = new Table(rowState.ToString(), this.Columns);
54 foreach (Row row in Rows)
55 {
56 if (row.RowState == rowState)
57 {
58 tmpTable.Rows.Add(row);
59 }

60 }

61 return tmpTable;
62
63 }

64
65 /// <summary>
66 /// 依据现有的数据表的架构,生成新的数据行
67 /// </summary>
68 /// <returns></returns>

69 protected Row NewRow()
70 {
71 return new Row(Columns, this.TableName);
72 }

73
74 /// <summary>
75 /// 按关键字(数据行的第一列)匹配,并返回符合的数据行
76 /// </summary>
77 /// <param name="filterKey"></param>
78 /// <returns></returns>

79 protected Row[] Select(string filterKey)
80 {
81 System.Collections.ArrayList tmpRows = new System.Collections.ArrayList();
82 foreach (Row row in Rows)
83 {
84 if (row[0].ToString() == filterKey)
85 {
86 tmpRows.Add(row);
87 }

88 }

89 return (Row[])tmpRows.ToArray(typeof(Row));
90 }

91
92 /// <summary>
93 /// 打印Table的数据
94 /// </summary>

95 public virtual void Print()
96 {
97 System.Text.StringBuilder sb = new StringBuilder();
98
99 foreach (Column col in this.Columns)
100 {
101 sb.AppendFormat("{0}/t", col.ColumnName);
102 }

103 sb.AppendLine();
104 System.Console.WriteLine(sb.ToString());
105 foreach (Row row in this.Rows)
106 {
107 foreach (object obj in row.ItemArray)
108 {
109 System.Console.Write("{0}/t", obj);
110 }

111 System.Console.WriteLine();
112 }

113 }

114 }

 

好,到此Table所涉及的5个类都定义实现完毕了。
我们来回顾一下,Table中什么是最基础的,什么是最重要的?
按我们一般来看,表中最重要基础的实行,最重要的是数据。其实表最基础是的架构,架构就是列的定义,而行只不过是列的数据体现形式。
所以Table在构造的时候,必须先定义列的集合,而Row的构造函数是protected internal的,意义是不能在外面被构造,必须通过Table来依据列的定义来构造。

下篇,我们将看到我们对Table的继承,发挥更多OO体现。

 


本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806271

相关文章
|
存储 安全 Java
【1】String,StringBuffer,StringBuillder的底层结构研究
一:StringBuffer的底层 (1)线程安全的字符串操作类 (2)通过synchronized关键字声明同步方法,保证多线程环境下数据安全 1 @Override 2 public synchronized StringBuffer append(String str) { 3 toStringCache = null; 4 super.append(str); 5 return this; 6 } View Code (3)底层存储数据的Char[]数组,初始化时,该数组的长度是16。
1000 0
|
2天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
3天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
351 91
|
10天前
|
人工智能 自然语言处理 前端开发
Qoder全栈开发实战指南:开启AI驱动的下一代编程范式
Qoder是阿里巴巴于2025年发布的AI编程平台,首创“智能代理式编程”,支持自然语言驱动的全栈开发。通过仓库级理解、多智能体协同与云端沙箱执行,实现从需求到上线的端到端自动化,大幅提升研发效率,重塑程序员角色,引领AI原生开发新范式。
851 156
|
3天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
257 156
|
4天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。