致力Winform开发框架的研讨与放开,也举行了发出几乎单新春了,从首的花色雏形到即各种重要特点的进入到,是通过了广大品种的总结归纳和提高,有些则是基于客户要或采取前景的内需展开的一应俱全,整个Winform开发框架具有老好的通用性和借鉴性,本文自该Winform开发框架进行包括总结,力求将各个重要的特性开展局部详实的说明,使大家了解任何Winform开发框架的样子和特点。

统计 1

Winform开发框架总体性概括出:支持插件化应用开发,能够动态配置和加载开发的插件;菜单支持动态配置,可因用户权限进行动态控制显示;集成各种独立开发好的模块,如权限管理网、字典管理模块等,自动更新模块等,实现系统的权能控制、字典管理、软件支持远程自动更新等功效;可重复使用的体系基础模块,Winform分页控件和.NET开发公用类库等;整个框架通过和代码生成工具Database2Sharp进行配合,能够一键变整体性框架代码,Winform系统界面代码,开发再敏捷。

简书

满Winform开发框架,提供了众广泛业务体系提供的作用,包括Excel数据导入导出,能快导入自定义模块的Excel数据,快速导出列表数据;自定义Excel自定义模板报表的转移,生成各种繁复的Excel报表;强大通用的统计图表模块,数据统计还便民;基于多数依的多少查询模块和通用高级查询模块,查询数据重复有益于;框架提供基于多种数据库(Sqlserver/Oracle/Mysql/Sqlite/Access)的咬合,能够手动配置数据库类型,通用模块内置支持多数据库切换;框架提供了惊人封装的数码看基类,开发代码更少又速;框架界面基类也拓展合并封装,使用还便宜,效果更统一;框架提供基础性的支持,包括合并登陆、闪屏、托盘功能,以及为插件模块提供登陆用户信息与系信息。

正了解简书是打一个科技类网站上懂之,喜欢上她是坐其概括的品格,从13年于便直停留于这个平台达成,平时一致有空就见面看首页推荐的章。

Winform开发框架的重要性职能概览如下图所示。

斯平台最初的作者有十分老片段是程序员,因为当时自便是一个轻做的程序员构建的一个网站。虽然她们之位置大多是码农,但技术性的篇章并无占用主题,写得又多之凡其他领域(比如电影评论、时事等)的章,不过文章的组织及逻辑都深谨慎,所以重重偶尔会起“一看笔者就是是理科生”的品。虽然咱藏得杀老,但言究竟出卖了咱们真正的身份。随着此平台的前行和扩大,涌入了其他各行各业的人员,起初我还会说有第一的几乎独行业,现在也做不至了,因为人实在太多矣。

统计 2

每当宣读文章的长河中,我发现了好多好玩和有料的撰稿人,他们要也创业者,或为产品经营,或也程序员,或也时评高手,或也诗人,或为广告文案与策划,或也插画师,或也擅自撰稿人,或为公务员,或也老师,或也上班族文青,教育背景、职业和社会经验不一,但都各具特色,好多稿子给自己不同档次的消息或者诱导。

1、支持插件化应用开发,能够动态配置以及加载开发之插件

框架实现基于插件化的行使,如下所示。

统计 3统计 4

支持插件化应用之开销框架能吃程序带来无限的生命力,也是时成千上万网、程序追求的要方向有,插件化的模块,在照一定之接口标准的根基及,可以兑现快捷集成,也尽管是所谓的热插拔操作,可以无限对都支付好系统进行扩展,而且不会见潜移默化已有些效益,不再要的模块,通过改配置移除即可。

插件化应用为是眼下框架和网出之主流趋势,从开公司的活管理角度来拘禁,第一可管控好就有些框架产品,第二方可拿中的人口分配到不同的业务模块中,让她们本一定之接口即可快速支付,从而提高组织对事情模块的横向切割和飞跃支付的频率,更好、统一、高效到位企业化应用框架的搭建及使用。

直白以来还不知底简书有多少的用户,只知更加多,下面由V先生列有之数目是值得玩味之。

2、菜单支持动态配置,可依据用户权限进行动态控制显示

相似Winform程序中,菜单都是直写在主程序中的,这样对修改及掩护菜单的有关消息,可能有所不便,而且于插件化应用,新增菜单是大面积的业务,这样便需要针对菜单进行动态配置管理了,通过后台菜单的布和权力的指定,能够落实菜单的动态加载与权限验证。

据此菜单也是权力分配的同样局部,为了有效管理菜单资源,我们将菜单放到权限管理体系受到进行管理控制。

统计 5

设定好菜单的图标与Winform窗体类型,就能当Winform框架中动态构建菜单信息了。菜单的图片放置于网的相对目录下即可。

统计 6

统计 7

 

内部,本文统计的5000各类作者并发布了90910篇稿子,115784118许数,占简书全部篇章的65.51%:

高于100首文章的撰稿人111口,合计21110篇稿子,占简书全部稿子于15.21%;
21-100篇稿子的撰稿人1014总人口,合计40670首文章,占简书全部篇于29.31%;
10-20篇稿子的作者1183人,合计16586首文章,占简书全部稿子于11.95%;
1-9首文章的作者2692丁,合计12544篇稿子,占简书全部篇于9.04%。

3、集成各种独立开发好的模块,如权限管理体系、字典管理模块等,自动更新模块等

今咱们虽随“二八以则”来想一下即简书大概有略注册人口,当然就是测度,仅供游戏。5000大多各类作者贡献了简书全部文章的65.51%,也就是说每本人(只对统计的就5000个)的贡献率是13.1%,那更搭2000丁,就差不多得使贡献值达到80%,那么可以预估有大概发生35000的写作者,这个数字只是单纯的凡写作者而无包括阅读者。我深信不疑V先生已经关注了几用爱好写篇的作者了,其中因嘛,你知道的。

 3.1 权限管理模块

权力的分配与管制,基本上是每个业务系统要考虑的东西,而这些常用的事物,在全方位Winform开发框架中,把她看成一个单独的模块,既方便维护管理,也留起接口非常轻开展合并,这样能当路面临再三开展以。

权系统要考虑的系统用户、组织机构、角色、权限定义和分红、菜单管理、用户登录日志等息息相关信息。对于各级新增一个系统,我们只需要在权力管理网受增一个系类型定义,以及相关的效果、菜单数据即可,非常方便管理。

统计 8

自打细分的统计看,会被一个网站贡献内容之吧唯有是少数部落,他们贡献的百分比占及了异常非常的如出一辙局部,这里呢好似符合“二八遵循则”。前片独稍分类里的用户应是简书这个平台需要全力以赴保持的,只有他们活跃在这平台及,才会啊平台不断提供上乘的情,从而抓住来又多之用户。我眷恋简书已经获得了“一千单铁杆支持者”,后续应该考虑怎么创造重老的价了。

3.2 字典管理模块

另外,除了权力的治本,字典管理也是健康工作模块的一个总归要效益,因此字典管理模块于Winform开发框架中,也是一个独自的模块进行开发管理,在运用的时光进行集成即可。

字典的归类可以以多级进行分类管理,可以拖拉进入新的分类,非常方便。

统计 9

对此那些只读的网友来说,他们本着这个平台的忠诚度是不见面极其胜的,除了这里,他们还得自其它地方获得到读书的意。那些文章写得无多之网友针对此间的忠诚度也无会见无限强,不可知被关注与彼此,自然而然就见面失去兴趣,离开为是必之挑。曾经介绍了很多底爱人及是平台来,但确能留下的凡那些喜欢做之丁,其它的为只是是偶然看看,或者是不再关注。

3.3 自动更新模块

诚如景象下,为了使得管理应用程序的通告和创新,我们要软件支持远程自动更新功能;在Winform开发框架中另行引入一个机关升级更新的通用模块,这个自动升级的通用模块除了有着一般的效能外,可以通过部署程序标题、升级路线方法等办法,实现通用化的升迁操作,其他需要提升的先后,拿过来就好使,经过项目的重组与优化,已经有所比较好之应用前景了。

据通用自动更新模块具有下几乎只特性:

1)程序标题可安排,更新路径而安排,适用于各种需要更新的品种结合。

2)支持文件复制或者对减少包进行解压,适合重新多琐碎程序集的一体化提升。

3)支持文件更新后活动启动,或者带参数的启航方式。

统计 10

粉丝过100底有269人,而当《玩转简书,你要知道之142口》一轻柔遭遇,过百的只有95总人口。269总人口被,有133总人口粉丝超过200,71人数粉丝超过300,49人数粉丝超400,15人口粉丝超1000。

4、可重复使用的系基础模块,Winform分页控件和.NET开发公用类库等

自从95届269之扭转来拘禁,简书的前进要对的,因为少首稿子的光景统计时才差几单月的日子。要清楚,从0到95几花了片年多的时光才好。

4.1 Winform分页控件

为增强多少的取得和展示效率,一般情形下,我们都要针对数码进行分页获取和出示,在网络化环境,这种方法获取数据特别重大,在Winform里面,没有现成的分页控件可以行使,因此出于此考虑,把数量显示、数据导出、数据打印等诸多效应集成一起,更加方便使用。分页控件完美支持列表数据的分页,可以调动显示列及顺序,是否出示复选框,字段别名,奇偶列的颜色变化,列信息提示和多少复制等等众多实用细致的力量的。

列表的数目绑定及展示代码,通过代码生成工具,可以一键别所待的界面代码,开发效率飞一般的升级换代。

统计 11

统计 12  

体贴入微别人较少或篇少,但粉丝可多之作者,大多是本当另外社区要twitter、新浪微博、豆瓣、知乎、果壳、喜马拉雅电台相当地之宠儿,或者作者之前长期写过独博客做过站长,或者作者是有媒体之简书号,或者作者是在切切实实中曾经发生声望比如自由撰稿人、互联网创业者、技术大拿等。

4.2 .NET公用类库

俗话说,一个烈士十独援,众人拾柴火焰高等都印证一个理,有再多的资源,更丰富的累积,都是扶助你走向成功,走向极限的推动力。就咱们开发者而言,其中技术的积攒、资源的积攒,就是近乎一个个好汉、一清根好柴,是我们能够进行快速开发之管与推动力。

这些类库是自我操多年软件开发,逐渐提炼和意识的片段闪光点或者好有,有些是接到别人的名特优之事物,有些是温馨逐渐提炼的花,以前,在网络直达见到有的开源的类,总会事先看那个是否来包装好、功能独立的援助类库,发现好之救助类库,总是美滋滋若狂好一阵子,学习中逐渐积累,研究中逐步提炼,多年了后,略有小成,终也今日所介绍的增援类库集合。这些帮助类库平时为并无是独具的且见面用得及,不过有些常用的,几乎各个品种就会见就此到,类库涉及面非常普遍,能够为我们付出节省成千上万日,并且我们吧得根据自己的急需开展扩展到,形成自己之类库集合。

上述的谜底告诉我们,积累非常重大,只有写有有价的物才能够取别人之喜。如果我们尚没让关注还是写了广大之稿子可取未了人家的喜爱,只能说明我们尚无达标一定之档次,需要持续修炼内功。

博客公用类库在线帮助文档列表:

 厚积薄发,丰富的公用类库积累,助你速开展系统开发(1)—-开篇总结
 厚积薄发,丰富的公用类库积累,助你快开展系统出(2)—-常用操作
 厚积薄发,丰富的公用类库积累,助你快速开展系统开发(3)—-数据库相关操作
 厚积薄发,丰富的公用类库积累,助你快速开展系统出(4)—-CSV、Excel、INI文件、独立存储等公事有关
 厚积薄发,丰富的公用类库积累,助你快速开展系统开发(5)—-热键、多线程、窗体动画冻结等窗体操作
 厚积薄发,丰富的公用类库积累,助你快开展系统开发(6)—-全屏截图、图标获取、图片打印、页面预览截屏、图片复杂操作等
 厚积薄发,丰富的公用类库积累,助你快开展系统出(7)—–声音播放、硬件信息、键盘模拟和钩子、鼠标模拟与钩子等装备相关
 厚积薄发,丰富的公用类库积累,助你飞开展系统开发(8)—-非针对如加密、BASE64加密、MD5等常用加密处理 
 厚积薄发,丰富的公用类库积累,助你飞开展系统开发(9)—-各种常用辅助类
 厚积薄发,丰富的公用类库积累,助你速开展系统开发(10)—各种线程同步的集合类
 厚积薄发,丰富的公用类库积累,助你速开展系统出(11)—各种线程相关操作类
 厚积薄发,丰富的公用类库积累,助你快开展系统出(12)—
网络有关操作辅助类

5、代码生成工具Database2Sharp的三结合

浑框架通过和代码生成工具Database2Sharp进行配合,能够一键转整体性框架代码,Winform系统界面代码,开发再速。

统计 13

每当整Winform开发框架中,Database2Sharp生成出来的代码体现了颇完美的整合性,能够无缝过渡抱开发的框架体系中,无论是常规的事体逻辑和数据访问层代码,以及一些列表、编辑界面的Winform界面代码,都能够快变化,稍作调整即可满足工作模块的需。

Database2Sharp是一个粗略点击几坏鼠标就会一气呵成同样两全代码量的代码生成工具,效率惊人、友好体贴,真正的开支好伙伴。提供了针对性SqlServer
2000、SqlServer
2005、Oracle、Mysql、Access、SQLite的支撑;可以转各种架构代码、Winform界面代码,并且与Winform开发框架到组合,体现出再胜似的支付效率。

统计 14

6、通用的Excel数据导入导出,能迅速导入自定义模块的Excel数据,快速导出列表数据

鉴于一般的工作体系,经常性的数目导入时死健康的业务需,因为毕竟使用Excel来操作数据吧老有利,或者由于系统之间的数据交换需要,我们要提供一个入口被客户导入所欲之数据。但是导入数据的当儿,不同的工作数据对应不同之Excel文件,很为难成功统一,但万一是每个业务模型,都创一个不等之导入界面来操作Excel数据,又见面看说不定某种程度上重复劳动,增加支出暨保护本。

那么闹管一致种在两者之间的不二法门,来促成效率的不过优化,并且能够联合行使好一个导入的界面也,在付出领域,只要会体悟的,一般也会一气呵成,由于工作的待,在自家之Winform开发框架吃引入了一个通用的数额导入模块,来实现这个既是联,又是变的业务需。Winform框架提供的单通用的Excel数据导入导出机制,通过代码生成工具Database2Sharp自动生成的代码,就富含了怎样使用此通用导入模块的相干代码和该模块的导出数据的代码,我们设召开的尽管是于系统运行起来,导出一些数目作为有模块的Excel模板即可。下面的意义按钮就是采取代码生成工具自动生成的界面包含的按钮。

统计 15

通用数据导入功能,包含下面几乎个点的内容。

统计 16

脚就是一个实在变化的功能模块,其导入界面的运作效果。

统计 17

在绝的之状态栏里面,但我们保留数据的时,会调用后台线程进行数据保存,并显示数据导入的快慢状态,由于是采取后台线程处理,不见面死时底界面,在差不多文档的Winform开发框架界面中,可以切换至外作业界面进行其他处理,不影响整界面操作。

7、自定义Excel自定义模板报表的浮动,生成各种繁复的Excel报表

成百上千情况下,我们需要转变于正式的Excel模块,因此自定义模板报表就是同样栽颇好之方案,Winform开发框架提供了多种起定义Excel报表的生成。

统计 18

用普通的二维表,虽然能够满足大多数的气象,不过当形似的事务受到,自定义模板的报表根据贴近实际,符合客户的要求,虽然于定义模板的报表,比普通的二维报表复杂一些,不过使用Apose.Cell控件,并在预设模板被预设变量,可以十分成大复杂的报表。

具体的自定义模板报表可以参照下自家总统计的鲜首文章。

运Aspose.Cell控件实现Excel高难度报表的变型(一)

以Aspose.Cell控件实现Excel高难度报表的变化(二)

譬如生成一个业内的出库单,这个表单有表头信息,列表数据信息,并非一个便的二维表,而且这种格式比较固定,因此十分符合由定义模块报表的变更操作。

统计 19  

 其他计划模板如下所示:

 

统计 20 

实则变化的报表如下所示:

统计 21

8、强大通用的统计图表模块,数据统计还便于

统计图表在不少路都可能用到,集成到框架中,更便利大家对有些图纸项目的规划理解以及效能的选用。在相似的风俗习惯的框架中,可以下ZedGraph开源控件或者微软于带的MSChart进行图纸设计,DevExpress控件套件有协调的图片控件,这里要介绍因DevExpress控件的图纸控件进行图片设计。

8.1 普通统计图表

这边因的一般统计图表,只是针对表某一路进行单一的统计,可以打饼状图、柱状图的图片中体现这些品种分级所占用的百分比和多次价值,在Winform框架中之日常统计图表模块中,包括了饼状图、柱状图跟数码表格,这样还便利对数据开展宏观的分析和查看。整个模块是可以用的,指定字段属性就足以较合理的显现出未跟分类型的统计功能了,具体成效图如下所示。

统计 22

上面的统计图表中,还噙了脚两个功能模块,如下所示。

统计 23

统计 24

8.2 动态项目统计图表

偶尔,对于表里面的多寡,可能使对准两样品类的始末开展动态的统计,以确定他们分别的比重情况,那么这些动态项目的统计图表就较合适了,例如,对于患儿资料之军事管制,可能需要统计各种病种所占有的比例要各种工作门类的犯病率,这些不太确定的统计项目,就用一个克支持动态项目的统计图表进行支持,对于本Winform框架,为了较好表现是项目报表的意思,我选了对备件类所占用的百分比进行一个统计分析,得到下面的统计图表,如下所示。

统计 25

地方的图形统计,除了能基于局部原则进行限查询范围外,还好针对有些预设的统计字段进行动态选取,然后根据字段里面的各种内容(统计项目)进行统计,这样便得较实用的统计有各种类型的数值及比例了。

8.3 多再坐标对比统计图表模块

于Winform框架中,可以本着有平年各月份的出入库数量进行一个分析,得到下面的统计图。

统计 26

以上数据未多,展现可能无顶尴尬,下面我深受来自我任何一个软件系统的界面,其中针对病人的出入院记录进行一个统计对比分析,统计报表如下所示。

统计 27

9、基于多数据库的多寡查询模块和通用高级查询模块,查询数据重复有益于

当自我的Winform开发框架中,使用了一个查询辅助类SearchCondition来促成查询条件的得与转发,这个辅助类内置了针对多数据库条件的解析处理,因此能充分好别所欲的数量查询条件,正确高效获取所用的数目进行展示。

        /// <summary>
        /// 根据查询条件构造查询语句
        /// </summary> 
        private string GetConditionSql()
        {
            //如果存在高级查询对象信息,则使用高级查询条件,否则使用主表条件查询
            SearchCondition condition = advanceCondition;
            if (condition == null)
            {
                condition = new SearchCondition();
                condition.AddCondition("ItemName", this.txtName.Text, SqlOperator.Like)
                    .AddCondition("ItemBigType", this.txtBigType.Text, SqlOperator.Like)
                    .AddCondition("ItemType", this.txtItemType.Text, SqlOperator.Like)
                    .AddCondition("Specification", this.cmbSpecNumber.Text, SqlOperator.Like)
                    .AddCondition("MapNo", this.txtMapNo.Text, SqlOperator.Like)
                    .AddCondition("Material", this.txtMaterial.Text, SqlOperator.Like)
                    .AddCondition("Source", this.txtSource.Text, SqlOperator.Like)
                    .AddCondition("Note", this.txtNote.Text, SqlOperator.Like)
                    .AddCondition("Manufacture", this.txtManufacture.Text, SqlOperator.Like)
                    .AddCondition("ItemNo", this.txtItemNo.Text, SqlOperator.LikeStartAt)
                    .AddCondition("WareHouse", this.txtWareHouse.Text, SqlOperator.Like)
                    .AddCondition("Dept", this.txtDept.Text, SqlOperator.Like)
                    .AddCondition("UsagePos", this.txtUsagePos.Text, SqlOperator.Like)
                    .AddCondition("StoragePos", this.txtStoragePos.Text, SqlOperator.Like);
            }
            string where = condition.BuildConditionSql().Replace("Where", "");
            return where;
        }

    /// <summary>
    /// Sql的查询符号
    /// </summary>
    public enum SqlOperator
    {
        [Description("Like 模糊查询")]
        Like,

        [Description("Not LiKE 模糊查询")]
        NotLike,

        [Description("Like 开始匹配模糊查询,如Like 'ABC%'")]
        LikeStartAt,

        [Description("= 等于号")]
        Equal,

        [Description("<> (≠) 不等于号")]
        NotEqual,

        /// <summary>
        /// > 大于号
        /// </summary>
        [Description("> 大于号")]
        MoreThan,

        [Description("<小于号")]
        LessThan,

        [Description("≥大于或等于号 ")]
        MoreThanOrEqual,

        [Description("≤ 小于或等于号")]
        LessThanOrEqual,

        [Description("在某个字符串值中")]
        In
    }

除此以外,一个吓的多寡查询
,一般发生一个有力的高等查询模块,这个模块于很多先后中还蛮宽泛,也是于客户扩大查询的一个好好之互补,由于自一直想自己的Winform开发框架能够改善,所以做了这通用高级查询模块,希望对后自好具有的类型以及框架本身,都能够快的施用。

统计 28

 在介绍输入条件的下,我们注意到,查询输入,基本上可以分成几看似:其一是健康的公文类,使用文本框替代即可;其二是产拉列表类型,用户从列表下面选择内容;其三是日期类型,需要用户指定开始日期以及竣工日期;其四是数字型,需要用户指定起始与收之数值。

1)常规的文本类标准输入界面:

统计 29

2) 下拉列表类型条件输入界面:

统计 30

3) 日期类型标准输入界面:

统计 31

4) 数字型标准输入界面:

统计 32

10、框架提供依据多种数据库(Sqlserver/Oracle/Mysql/Sqlite/Access)的整合

虽然我们在其实项目被,一般采取同样栽数据库进行拍卖,但是不同之类型,采用的数据库类型或者不同,本Winform开发框架为好演示与扩展的得,内置支持了Sqlserver/Oracle/Mysql/Sqlite/Access,更多的数据库,也得以通过扩张数据库访问基类的措施展开再次多数据库的支撑。

Winform开发框架中的兼具模块,如用到了数额存储的,如权限管理管理模块、通用数据字典管理模块,均放置支持就几栽数据库的结支持。整个Winform开发框架的数据库访问,能够手动配置数据库类型,对于同一栽数据库,也足以将数量存储分开储存,如工作数据存储在一个数据库,权限管理控制存储于另外一个数据库这种办法。

统计 33

Winform开发框架提供多种数据库支持,数据访问基类依然十分简短,因为咱们利用的数据库访问模块是EnterpriseLibrary,把数据库抽象化,并且自己管装有数据库通用操作放在了一个最佳基类上,具体的数据库基类只需要贯彻转变之一些即可。业务访问类则利用泛型进行包装处理。

故,Winform开发框架提供了冲天封装的多少看基类,开发代码更不见又高速。

11、框架界面基类也开展合并封装,使用还有利于,效果还统一

为重新好出常因此界面模块,Winform开发框架将一些公用的界面模块,统一放置于了一个BaseUI的品种受到,把其中的通用高级查询、通用数据导入模块、常见处理界面基类,插件接口等模块放在同,根据易于管理以及用。这样开发的模块,重用很多常规的界面,开发效率还快,使用更有益,效果又统一了。

统计 34

12、框架提供基础性的支撑,包括合并登陆、闪屏、托盘功能,以及为插件模块提供登陆用户信息以及网信息

整个Winform开发框架,是发生一个框架启动模块进行集中处理的,系统启动后,用户登录处理后,通过动态加载菜单和插件模块,并当核心框架界面中开展亮,提供权限决定和登录用户信息等地方的框架支持。另外框架支持闪屏图片的动态配置,系统激活热键和托盘缩小灯功能。

统计 35

由系统登录后,框架本身蕴藏了用户登录和权限信息,框架动态加载某个模块后,会管用户信息及权力决定信息,注入及模块的界面基类中,因此插件的界面模块只要是连续了BaseUI的界面基类,就会获得到用户信息及权限控制信息了。

特色总结

Winform框架,本身就是是为能快速开一个飞快、稳定、美观大方、扩展性强的使软件系统。因此自以好十年左右的共享软件开发生涯和企业项目支付中,不断揣摩,精雕细琢,对广大首要的特征都进行了概括和提高,吸收项目面临好之闪光点,借鉴一些好的软件开发思路,力求把软件做的重好;在付出效率方面,除了支付一些例行通用的模块、在模块内部又充分考虑继承、重用的平整,还针对性大幅度提高效率的代码生成工具,根据Winform开发框架的实现思路与特点,进行了周全优化,使得无论在业务代码生成,还是以界面代码生成方面,均能把开发效率达到绝致,希望一切Winform开发框架能够不断发挥它的魅力及吸引力,为更多之人带希望,体验出的趣。