从零开始系列,用C#做软件产品:私人日记(五)第一个类库

这两天抽空看了下网友对教程的评论,发现自第三、四篇开始几个集中的问题:

一是反应图片不清晰。原因应该是找到了。我为了加快码字速度,先把文字和图片都写到word文档中,但是发现通过复制粘贴只能把文字粘贴到头条的编辑框中,图片无法一起复制。然后我看到头条有个一键导入的功能,我觉得挺方便就用了,结果这个功能会把图片自动压缩,导致图片模糊。以后我还是手动贴图,应该就不会有这个问题了。

二是有些网友真的是零基础。比如c#的语法、VS的使用等等,一旦教程涉及到这些内容,如果交待不清就开始看不懂了。这应该是我的问题,我的目标就是教大家从零基础做产品,并且我的设想是按需教学,用到什么讲什么,循序渐进,如果知识点一下子铺开太多就会让新手无法适应,我后面会把内容讲的更细一些。当然项目的推进速度可能会因此慢很多,不过如果能让看到教程的网友就能学会,慢点也值得。

另外我会在下方给出一个介绍c#语法的网站,大家有兴趣也可以自学下。

三是有网友建议图片用gif格式。这样可以让操作过程更明白。我第一反应是这样操作花费的时间会更多,教程更新速度会更慢,有点抗拒。但是现在看来,采用gif形式内容质量可能会更高一些,或许值得一试。不过我第一次做,没什么经验,不知道电脑屏幕录制到手机的分辨率会不会有影响,权当尝试吧。

另外上篇教程有人反馈右键菜单那里,新建、修改、删除是怎么添加的没有看懂,我这里做个动图补充下。

从零开始系列,用C#做软件产品:私人日记(五)第一个类库

如果还有哪里有看不懂的,可以在评论区留言明示,我会在后面的教程补充说明。

好,我们继续我们要做的任务。

我们的下一个目标是通过界面向树控件中添加节点,节点内容是什么呢?是分类数据。那么如何来描述这些分类数据呢?我们之前有提到面向对象设计,所有的事物都要被抽象成一个类,分类数据也一样,我们把它命名为Category。

如果我们只有做这一个项目,那么这个类就放在当前的项目就可以了,但我们的计划是以后会有第二阶段、第三阶段的开发计划,它们分别会建立不同的项目,这些项目的界面表现形式可能是不一样的,但是最终要处理的数据却都是一样的,也都需要用到Category这个类。如果是每个项目都重复的创建一个Category的类,那以后在Category类中发现了Bug或是需要任何的改动,那三个项目都要修改,工作量就明显成倍的增长,而且很容易遗漏、出错,产生各种各样的问题。

这个问题怎么解决呢?答案就是使用类库。创建一个类库项目,这个类库可以被其他项目同时引用,以后修改,只需要改变类库中的代码,重新编译,其他项目就可以调用了,完美实现了一份代码在多个项目中复用的目的。这也是软件编程的魅力之一,高可复用性。很多高手就是通过不断学习总结,形成了自己的类库,让自己的开发效率越来越高。

只要是编程涉及的内容,就必然涉及到命名。类库也是要有名字的,这个类库是专门描述数据的,我一般给这种类库称为Model。这个没有定式,自己能理解就好。然后因为解决方案的名称是Diary,所以类库的名称就命名为Diary.Model。

下图演示如何在VS中创建类库:

从零开始系列,用C#做软件产品:私人日记(五)第一个类库


从零开始系列,用C#做软件产品:私人日记(五)第一个类库


类库创建成功后,会自动为我们生成一个Class1.cs的类,这个没什么用,我们直接把它改成我们需要的Category类。

从零开始系列,用C#做软件产品:私人日记(五)第一个类库

用来描述分类数据的Category类有了,它里面需要哪些数据呢?这需要对这个类进行设计,设计思考过程如下:

分类名称肯定是需要的;

分类编号也是必须的,用做唯一标识;

这些数据最终构成的是一个树状结构,肯定要有层次关系,所以父类编号也是必须的,用做它的上级分类编号,第一层可记为-1;

有了上面三项数据,就可以构成一个树状结构了。但是要想用户体验更好,还需要再增加几项内容:

是否存在子分类,在每个分类信息保存的时候自动判断然后存储,查询时只需要读取字段值就好了,可以大大提高查询的效率。

有人看到这里会产生疑问,有没有子分类通过父类编号一查不就知道了吗?有必要再增加一个字段浪费空间吗?

大家可以暂停下,思考为什么要这样设计?

这样设计的目的就是为了提高查询效率。因为查询是用得是最多的,软件效率的瓶颈一般都发生在执行次数多的地方,被执行的代码越多就越要注意优化。假设查询1次需要10ms的时间,如果有100个子分类就是1秒,1000个子分类就是10秒了,那是什么样的用户体验?如果有了这个字段,一次查询就可以知道这些分类是否有子类,效率会得到几何倍数的提升。

所以增加一个冗余字段来提升效率,这就是我们常说的用空间换时间的思想。其实很多编程来源于生活,道理都一样。时间就是金钱,你的能力就是你的空间。你现在正在看我写的教程,增长了知识,提升了能力,就可以为以后赚更多的钱打基础,这就是典型的用空间换时间:)

大家可以继续想象,多了一个字段,那用户保存数据那里肯定要多花一点时间了,不用关心,因为哪怕多花费1秒钟,用户感觉也并不明显,因为很可能几天就只点那么一下。在有限的时间里干最值得的事,这也正是我们前面提到的开发方法中的质量投资思想。说到这里,还在打工对自己薪水又不满意的小伙伴要思考问题了,要想让老板给你升职加薪,首先要像查询功能那样,让老板决定你重要,而不是像保存功能那样,有就行。

这里说得多了些,我们继续。

分类类型,可以对不同数据做不同的处理,比如不同类型显示不同的图标;

显示序号,比如同级分类中,想让某个分类显示在最前面,就可以调整这个显示序号;

分类说明,有的时候分类名称不足以描述该分类的具体用途,那么可以写在分类说明中进行记录;

备注,这个字段是我的个人习惯,有的时候突然需要某个功能但又不想增加字段,就借备注字段用下。

当然用户还可以根据自己的需要再进行扩充,目前我需要的暂时就这么多。

编码过程就略过了,在Category.cs文件最终成品如下图:

从零开始系列,用C#做软件产品:私人日记(五)第一个类库

这里涉及到的代码就多了,考虑到有些同学对c#的语法还不熟,下面就按代码顺序逐个讲解:

using System; 这里的using可以理解为使用默认命名空间的意思。什么是命名空间呢?还是举例说明:比如学生张三打架,校长让教导主任把张三叫来谈下,可是学校里有五名同学都叫张三,教导主任问哪个张三?这时候校长就需要指定范围了,五年一班的张三。这个五年一班在C#里面就称为命名空间,写法就是“五年一班.张三”。后来张三伙同其他同学李四、王二、赵大一起打群架,校长这次需要把他们都叫来,于是得这样“五年一班.张三、五年一班.李四、五年一班.王二、五年一班.赵大”,可是这样每个前面都要加五年一班太麻烦了,校长就跟教导主任约定,这个五年一班是重点关注对象,以后再叫人默认就是五年一班,找不到的时候再说。用C#的写法就是“using 五年一班;”,然后直接就可以用张三、李四....了。后面的分号;代表语句结束。

所以你现在应该明白using System;的含义了吧?就是这份代码文件中用到的类默认都从System的命名空间找,如果找不到,就提示编译不通过。当然这样也可能有弊端,如果是几个班级的同学联合作战,而且还有重名的,那就只能还是用最原始的方法:五年一班.张三这种形式。

namespace Diary.Model 上面的using是使用命名空间,这里的namespace是声明下面大括号内的类都属于Diary.Model命名空间。用上面的例子来形容,Diary.Model就相当于五年一班。要在其他位置引用Category类时,需要用Diary.Model.Category来引用,或像上面一样用using来指定默认命名空间。

public class Category

这行代码是声明一个名为Category的类。

public表示这个类的访问类型为公开;可以让其他类库访问,以便给外界提供接口;如果不指定public,就表示这个类只在这个类库中访问,没有对外接口,其他项目即便是引用了这个类库,也看不到这个类。

class表示声明的是一个类;Category 就是类的名称。

再往下的这些

从零开始系列,用C#做软件产品:私人日记(五)第一个类库

就都是类变量的定义了,我拿第一个来说明下:

public int Id;

这里的public表示Id的访问权限是公开的,其他类可以访问;如果指定的是protected则表示Id的访问权限只能给从Category 继承的子类才可以访问,其他类没有权限;如果是private则表示Id的访问权限只能给自己访问,其他任何类都没有权限。这里为了让初学者更易于理解和实践,我都设计成public,大家有个印象就行,以后关于类变量的访问类型应该还会有涉及,用到时我会重点讲。

int表示这个变量的类型是int型,即整数型;Id就是变量名。

其他变量都类似,就不多说了。

需要再说一下注释,就是我们看到代码中绿色和灰色的部分:

在C#中,

//表示单行注释,表示该行后面的语句都会被编译器忽略;

/*

....

*/

可以用做多行注释,用来注释代码块。上面两种方式都是单纯的代码注释,用绿色表示。

/// 连续三个就会自动添加

,这种用灰色显示。不仅会被编译器忽略,还可以在写代码的时候给出智能提示。比如上面的ShowOrder变量,我在summary中写了一段说明,在我使用ShowOrder这个变量的时候,VS就会弹出提示,以免用错。如下面示意:

从零开始系列,用C#做软件产品:私人日记(五)第一个类库

按照上面的编码做完后,可以按下面的步骤生成类库,如果没有编译错误,那就是完成了,一个最简单的类库就做好了。

从零开始系列,用C#做软件产品:私人日记(五)第一个类库

至于如何使用这个类库,我们留到下节继续讲解。

提前跟大家说明下,孩子马上要开学了,这几天事情比较多,下次更新时间可能会稍长。

另外希望大家多多参与关注、转发、评论,粉丝到1万我就能开专栏了,现在这种文章都没有分类,感觉很不方便。

------------------------------------------------------------

本教程已作为开源项目加入到Git,代码内容会随教程实时更新,大家有兴趣的话可以关注我,以获得最及时的更新。私信:私人日记 可以来获取Git的链接,C#语法 可以获取一个C#语法的网站。

大家阅读过程中有哪些看不懂或未尽兴的地方,可以在评论区留言,我会先记下来在后续的教程中找机会再说。

展开阅读全文

页面更新:2024-03-13

标签:可能会   字段   软件产品   注释   变量   语法   效率   私人   名称   代码   时间   项目   教程   日记   系列   内容   数据   图片   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top