面向对象
这是针对中高级程序员而设的面向对象文章,对您从面向过程转向面向对象,会有帮助。
中洲少年
一个深爱神国传统文化的男人,对身为神族人而骄傲。毕生为汉服复兴而努力。v:13535543524
展开
-
提供一个c# winform的多语言框架源码,采用json格式作为语言包,使用简单易于管理加载且不卡UI,支持“语言分级”管理
提供一个c# winform的多语言框架源码,采用json格式作为语言包,不使用resx资源,当然本质一样的,你也可以改为resx。原创 2024-05-21 10:35:04 · 747 阅读 · 0 评论 -
C# 用真实需求,手把手教你写面向对象的代码
好久没写过文章了,这里工作很忙。今天继续给大家讲解下,怎么写面向对象的代码。之前也写过类似的文章,但那都是随便举的例子,不是活生生的现实案例。今天使用我刚写的项目来举例子,它是真实存在的需求案例,引领大家一步一步写面向对象代码。号外:各位看到文档不要惊慌,我也是第一次接触这个文档,也不懂这些需求,就是纯看英文文档写出来的代码,跟你们没有两样,我对它的业务也是不懂的。一、首先,先仔细看下需求文档,需求文档是英文的,相信大家大体能看懂,需求是截取的片段。二、实现第一段需求本需求截图如下,该需原创 2022-02-18 11:14:52 · 3732 阅读 · 1 评论 -
不卡主线程,N个异步方法后台运行,且需要按时序顺序执行,要怎么写?
我们会有很多异步方法,通常,调用了N个异步方法后,哪个先执行完,哪个后执行完,是不确定的。场景:若需要确保不影响主线程,即不卡主线程,仍然让这些耗时的异步方法在后台执行,且需要让这些异步方法,按一定的先后顺序(时序)执行,那么要怎么办呢?下面直接提供一个类给大家针对上述场景使用。直接上代码,抄过去即可直接使用。using System;namespace Zhongzhou.TaskFlow{ /// <summary> /// 作业流程任务控制器 .原创 2022-02-09 17:01:28 · 1025 阅读 · 0 评论 -
C#面向对象设计模式14:命令模式(Command)
命令模式,先占位,由于文章太耗时,后面补上。using System;using System.Collections.Generic;using System.Linq;namespace SimpleFactory{ class Program { static void Main(string[] args) { 服务员 servicer = new 服务员(); 马师傅 shifu =原创 2021-01-12 17:26:42 · 394 阅读 · 1 评论 -
C#面向对象设计模式16:中介者模式(Mediator)
中介者模式,先占位,由于文章太耗时,后面补上。using System;using System.Collections;using System.Collections.Generic;using System.Linq;namespace SimpleFactory{ class Program { static void Main(string[] args) { 走位 servicer = new 走位()原创 2021-01-12 16:14:46 · 344 阅读 · 0 评论 -
C#面向对象设计模式15:迭代器模式(Iterator)
迭代器模式,先占位,由于文章太耗时,后面补上。using System;using System.Collections;using System.Collections.Generic;using System.Linq;namespace SimpleFactory{ class Program { static void Main(string[] args) { 炸好的油条 youtiaos = new 炸原创 2021-01-12 11:50:31 · 151 阅读 · 0 评论 -
C#面向对象设计模式13:责任链模式(ChainofResponsibility)
责任链模式,先占位,由于文章太耗时,后面补上。using System;using System.Collections.Generic;using System.Linq;namespace SimpleFactory{ class Program { static void Main(string[] args) { //前台服务员收到客人订单,录入系统下订单。 控制系统 controll原创 2021-01-08 10:26:32 · 242 阅读 · 1 评论 -
C#面向对象设计模式12:代理模式(Proxy)
代理模式,先占位,由于文章太耗时,后面补上。using System;using System.Collections.Generic;using System.Linq;namespace SimpleFactory{ class Program { static void Main(string[] args) { 现金支付 cash = new 现金支付(); 支付代理 proxy1 = n原创 2021-01-08 09:49:40 · 418 阅读 · 0 评论 -
C#面向对象设计模式11:享元模式(Flyweight)
享元模式,先占位,由于文章太耗时,后面补上。其实就是缓存使用。using System;using System.Collections.Generic;using System.Linq;namespace SimpleFactory{ class Program { static void Main(string[] args) { var package1 = new 炒粉打包(true, false);原创 2021-01-07 18:28:33 · 109 阅读 · 0 评论 -
C#面向对象设计模式10:外观模式(Facade)
外观模式,先占位,由于文章太耗时,后面补上。using System;using System.Collections.Generic;namespace SimpleFactory{ class Program { static void Main(string[] args) { Console.WriteLine("有客人来啦"); 服务员 waiter = new 服务员();原创 2021-01-07 15:24:14 · 144 阅读 · 2 评论 -
C#面向对象设计模式9:装饰模式(Composite)
装饰模式,先占位,由于文章太耗时,后面补上。using System;using System.Collections.Generic;namespace SimpleFactory{ class Program { static void Main(string[] args) { 月饼 cake = new 月饼(); cake.制作(); cake.价格();原创 2021-01-07 15:05:54 · 181 阅读 · 2 评论 -
C#面向对象设计模式8:组合模式(Composite)
组合模式,先占位,由于文章太耗时,后面补上。using System;using System.Collections.Generic;namespace SimpleFactory{ class Program { static void Main(string[] args) { 福建省 福建 = new 福建省(); 城市 龙岩 = new 城市(); 区县 连城县 =原创 2021-01-07 11:10:58 · 150 阅读 · 0 评论 -
C#面向对象设计模式7:桥接模式(Bridge)
桥接模式,先占位,后面再写文章补充using System;using System.Collections.Generic;namespace SimpleFactory{ class Program { static void Main(string[] args) { var meterial = new 辅料(); var potatos = new 酸辣土豆丝(meterial);原创 2021-01-07 10:21:07 · 135 阅读 · 0 评论 -
C#面向对象设计模式6:适配器模式(Adapter)
适配器模式,先占位,后面补充using System;using System.Collections.Generic;namespace SimpleFactory{ class Program { static void Main(string[] args) { 原味汤粉 product = new 原味汤粉(); //使用奶茶包装方式来打包。原本奶茶杯是无法打包原味汤粉的,但经过适配器一配原创 2021-01-07 10:19:03 · 217 阅读 · 0 评论 -
C#面向对象设计模式5:原型(Prototype)
原型模式,先占位,以后再补充using System;using System.Collections.Generic;namespace SimpleFactory{ class Program { static void Main(string[] args) { //来几碗原味汤粉和牛肉丸汤粉 List<汤粉> list = new List<汤粉>();原创 2021-01-07 10:16:44 · 183 阅读 · 0 评论 -
C#面向对象设计模式3:抽象工厂(Abstract Factory)
抽象工厂,先占位,后面再补充。using System;namespace SimpleFactory{ class Program { static void Main(string[] args) { 工厂 factory = new 农家风(); factory.创建桌子(); factory.创建凳子(); } } public int原创 2021-01-07 10:15:38 · 134 阅读 · 0 评论 -
C#面向对象设计模式4:生成器(Builder)
生成器模式是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建代码生成不同类型和形式的对象。它又叫建造者模式。一、情景假设有这样一个复杂对象,在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。这些初始化代码通常深藏于一个包含众多参数且让人基本看不懂的构造函数中;甚至还有更糟糕的情况, 这些代码散落在客户端代码的多个位置。如果为每种可能的对象都创建一个子类,这可能会导致程序变得过于复杂。例子:开了个小餐馆,提供了“手撕鸡”、“黑椒牛柳”...原创 2020-12-24 11:31:57 · 908 阅读 · 0 评论 -
C#面向对象设计模式2:工厂方法(Factory Method)
工厂方法模式是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。一、情景假设开了小餐馆,自主开发一套点餐系统什么的,提供了“手撕鸡”、“黑椒牛柳”、“酸菜鱼”这些菜,那么您最初的版本,可能就只有这三道菜的代码。小店经营一段时间后,客户越来越多,对菜品的丰富性也开始提出了要求,时常听到有人想吃“麻婆豆腐”,于是你为了多赚点钱,开始新增这道菜。如果您的代码与现有的其它类存在耦合关系,特别是当这种关系还是使用面向过程来编写的情况,那么您想要添加新类实现新的需求..原创 2020-12-04 10:43:47 · 494 阅读 · 2 评论 -
C#面向对象设计模式1:简单工厂
简单工厂模式,它实际不是面向对象的设计模式,所以标题是错误的。而这个错误,在网上到处都是。你一搜一大堆,而那些作者大多数都没有意识到这个问题。但作为面向对象设计模式的开篇,还是从简单工厂方法的介绍和编写入手。整个系列文章以中文编码是为了给您阅读方便。一、定义简单工厂模式描述了一个类,它拥有一个包含大量条件语句的构建方法,可根据方法的参数来选择对何种产品进行初始化并将其返回。人们通常会将简单工厂与普通的工厂或其它创建型设计模式混淆。在绝大多数情况下,简单工厂只是“工厂方法模式”和...原创 2020-11-27 14:05:03 · 327 阅读 · 0 评论 -
C#面向对象的武功招数:设计模式-前言
即将写关于设计模式武功招数的系列文章,本文在开始之前先说一些话。本文适合2年经验以上的程序员阅读。一、关于设计模式如同武功招数,它可以让你的代码更加优美和易于扩展升级等。设计模式是由西方老外发展提炼总结而成的,神国由于断层的历史原因,导致落人一步,神族人站在巨人肩膀上学习和运用它们。设计模式是根据多年解决编写面向对象软件时经常遇到的问题的经验总结发展而来的。这些模式为开发人员提供有关如何创建灵活、易于维护的应用程序的套路招式模板。设计模式可以在样式和形式上有所不同,但目的相同,它为应用程序提原创 2020-11-25 11:43:55 · 153 阅读 · 1 评论 -
C#接口Interface,接口隔离原则,如何使用接口?
C#接口,即Interface,每个人都很知道它并了解它。但知道和了解,并不表示,你能把它用好。实际上,如果看下你身边工作中的同事,包括你自己,回想一下,自己平时写代码所定义的接口多不多?很遗憾,我没有确切的统计数据,根据我个人的经验来看,4年经验以下的程序员,基本不怎么自己编写接口,抽象类甚至也很少。4年经验以下的程序员,通篇程序,充斥着各种不是public就是private,以及static。此观点代表个人经验,非统计数据。本文不讲解面向对象,不铺开,所以仅针对接口来说。..原创 2020-10-22 08:40:01 · 353 阅读 · 0 评论 -
C#一步一步教你如何去写面向对象代码
本文以“家庭”为例子,演示如何使用面向对象思维去编写代码。这是一篇文字较多的文章,建议您仔细阅读,因为它将完整展示构建一个面向对象代码的过程,当然这个思想过程是我个人的过程,每个人有自己思考的方式方法,我的仅供参考。码农,是指那些没有艺术的,只会面向过程,只会搬运的人,每天重复工作,而不去思考代码艺术的人。善于面向对象的人,他天生就应该是代码艺术家,这类人或许是不会把自己看成码农的。一、编写面向对象,首先要构思构思一般随意,你可以在自己脑海中构思,也可以借助专业的UML来构思,又或者借助纸笔原创 2020-10-27 18:07:58 · 1000 阅读 · 2 评论 -
C#面向过程or面向对象,很多人天天在写面向过程而不自知
这是一篇文字较多的文章,对于您从面向过程转向面向对象会有启发,我以我的实践经验带给你绝对真实的一些过程供您体会领悟。我没有确切的统计数据,根据我10多年的一线开发经验来看,神国程序员(仅限神国)十中有九,都是写面向过程代码,唯一的那个面向对象的程序员,还被当另类看待,因为整个团队没什么人能理解他的思想和代码,那种感觉是如此的悲凉。君若不信,待看完文章理解面向对象和面向过程的区别后,再站起来,观察一下整个公司,包括你自己,是写面向对象呢还是面向过程?下面言归正传吧。我觉得我大概需要科普一下面向过程原创 2020-10-27 18:55:05 · 2380 阅读 · 4 评论 -
C#要从面向过程转到面向对象,首先要从UML开始
凭着记忆,写一些UML的随想。这可能是一篇纯文字的文章,需要您静心阅读,本文带给你的是编程思想,而不是解决具体编程问题的文章。思想才是根本。一、UML不是编程语言它是用来描绘各种开发语言的设计思想的一种绘画语言,不能说UML是工具,因为它本身不具有工具的特性,只是帮助我们可以描绘类的关系、行为等。二、使用UML的工具可以用UML思想来绘制的工具主要有Rational Rose、Power Designer、Visio等,还有Visual Studio本身安装包中自带的类图..原创 2020-10-28 09:11:12 · 342 阅读 · 0 评论 -
C#面向对象的UML工具:StarUML介绍和入门使用
前面文章给大家讲解了面向过程和面向对象的区别。原文:C#面向过程or面向对象,很多人天天在写面向过程而不自知又以“家庭”为例子,给大家一步一步演示了如何使用C#开发一个面向对象的代码的思维演示过程。原文:C#一步一步教你如何去写面向对象代码后来又讲述了,要开始您的面向对象代码编写,需要从认识UML做起。原文:C#要从面向过程转到面向对象,首先要从UML开始本文讲述UML的工具,本来想选Retionnal Rose,由于一些原因,我下载不到。所以,就选择了StarUML这个工具,来给大家讲解和演示原创 2020-10-28 14:55:03 · 2265 阅读 · 0 评论 -
C#面向对象基础,讲解UML的关系划分,如何表示关系
前文给了大家一个UML的软件,本文将在用这个软件绘制一些例子,演示UML的关系用法。原文:UML工具链接UML的关系分类,这个必须记住,记不住也要想办法,总之,作为面向对象的基础之一,这个一定要背下来。一、总述UML的关系分类一共有这么几种:实现(Realization):它用于某类实现接口时表示。泛化(Generalization):也就是常说的继承,用于某类继承于某类时表示。关联(Association):它用于某个对象中有引用了另外一个对象时表示。比如A类,引用了B类这个对象。原创 2020-10-28 18:33:18 · 538 阅读 · 0 评论 -
C#面向对象基础,一步一步演示如何绘制UML类图
这两天,写了关于面向对象的一些知识文章,有提到UML要使用什么工具,如何编写出面向对象的代码,让您脱离娘胎自带的面向过程,等等系列的文章。本文则演示如何绘制一张UML类图,本文的例子,仍然沿用之前的“家庭”例子,因为“家庭”的话,大家好理解,每个人的身边事。本文的UML绘制工具是StarUML,我这次用的是官网下载的。本文演示的时候,一些地方用到了中文,这是为了演示方便才这么做的,您在代码实际编写中,不建议使用中文。一、绘制成员资料的UML类图我们需要成员类(Member)、成员接口(IMe原创 2020-10-29 09:26:16 · 2817 阅读 · 1 评论 -
C#面向对象原则:单一原则。手把手教您转为面向对象的程序员
如果您能从我之前的文章一直看到这里,我相信且自信,您一定可以渐渐的从娘胎里自带的面向过程,转变为面向对象的程序员。神国太缺面向对象的程序员了,举目望全司,10中有9、10中有10,都是原始的面向过程程序员。希望我的努力,能帮助到更多的程序员。面向对象原则之一:单一原则。一、正统解释单一原则规定一个类应该只有一个发生变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。二、独家解释单一原则,是一种编程原创 2020-10-29 15:48:07 · 348 阅读 · 2 评论 -
C#面向对象特性,封装继承多态。我知道你懂你知道,但你不会用
面向对象的特性:封装、继承、多态。本文是假设各位读者很懂很知道这些特性的情况下来写的,所以,关于封装、继承、多态的概念定义,您若不清楚,可以查找相关资料。本文针对老手,而非小白。本文假定你很懂很知道这些,但你就是写不出那样的代码。讲解你为什么就写不出写不好代码!!这是一篇思想指导性的文章,文字过多,需要您静心阅读,相信我,能您阅读我的文章,不仅是我的荣幸,对您更是会有深层次的帮助。一、写不出写不好的原因是对这些特性的理解,不是真正意义上的理解,你知道形,不知其义。导致你可以依样画葫芦,.原创 2020-10-30 10:32:28 · 210 阅读 · 0 评论 -
C#面向对象特性封装、继承、多态,如何在代码编写时使用封装?
本文适合有一定经验的程序员阅读。如上篇文章所说,本文假定读者你是懂的也知道这些特性的。文章的例子,以“家庭”为例来演示。封装家庭中有成员,我们要封装一个成员类,往往是有很多需求思考点的,但不论您怎么思考,都需求考虑单一性、开闭性等。上图左边和右边的Member类,有什么问题吗?可以称为封装吗?答案当然是都为封装。两种有什么问题吗?产生这样的类定义,实际是基于各自的需求来考虑的。所以,不能说左边的类好,还是右边的类好。左边的Member类,已经设为了只读,右边则允许可写。这是.原创 2020-10-30 11:15:02 · 258 阅读 · 0 评论 -
C#面向对象,如何在代码编写时使用多态?
本文适合有一定经验的程序员阅读。本文假定读者你是懂面向对象的封装继承多态的。文章的例子,以常见的“美食”为例来演示。文章的代码以中文演示,是为了让您看得方便,生产中,建议英文。多态它的规矩是简单而易见的,通常使用abstract和virtual来标记。所以,在C#中,您只需要根据这2个关键字,便可以认出它是多态。多态,可以针对方法、属性、事件、索引器使用。以美食为例,我们知道,美食存在多种做法,我们的业务会划分中西餐,而中餐和西餐的做法是不同的。所以,美食的类应该根据需求封装如下:.原创 2020-10-30 14:44:22 · 282 阅读 · 0 评论 -
C#面向对象,如何使用继承
继承,类似于老人家说的开枝散叶,从一个根起,不断的分叉生成很多枝叶。而继承就是这样子。继承适用于某类继承自另外一个类,该类可以是普通类,也可以是抽象类。如果是接口的话,我们术语不叫继承,叫实现。所以,继承是针对类而言的。为何要继承?我们常听说继承衣钵,一般是指收了徒弟,传授本领,有个人接班,发扬光大,做出比上辈更光彩的成绩。嗯,C#中的继承也是这个道理。通过继承,可以创建新的类,以便重用、扩展、修改父类的行为。这不就是发扬光大吗。继承还有开枝散叶的功能,一个父类,可以被很多.原创 2020-10-30 15:31:03 · 155 阅读 · 0 评论 -
C#教您一步步摆脱面向过程:接口隔离
前面有几篇文章,已经教了一些方式或者方法,帮助您摆脱娘胎自带的面向过程编程,从而转为面向对象。本文讲一下面向对象接口隔离,原具体的例子来解释可能好些,网上千篇一律的大多数文字描述,各位估计也不一定真的看明白了。本文例子出现的中文是为了便于理解,您实际编写代码时,不宜写中文。一、什么是接口隔离找了一段网上关于接口隔离的描述,描述的还是不错的:接口隔离原则表明客户端不应该被强迫实现一些他们不会使用的接口,应该把肥胖接口中的方法分组,然后用多个接口代替它,每个接口服务于一个子模块。如果已经原创 2020-11-11 15:02:34 · 226 阅读 · 0 评论 -
C#教您一步步摆脱面向过程:依赖倒置
前面有几篇文章,已经教了一些方式或者方法,帮助您摆脱娘胎自带的面向过程编程,从而转为面向对象。本文讲一下面向对象依赖倒置,使用具体的例子来解释可能好些,网上千篇一律的大多数文字描述,各位估计也不一定真的看明白了。于是,这就是本文的价值所在。由于我一路走过来,所以,我写的关于面向对象的思想,都是实践性的经验,会站在您还是一个初学者的身份上去讲述它,尽量让读者明白。本文例子出现的中文是为了便于理解,您实际编写代码时,不宜写中文。一、什么是依赖倒置普遍的解释是:程序要依赖于抽象接口,不要依赖于原创 2020-11-11 16:20:03 · 394 阅读 · 1 评论 -
C#教您一步步摆脱面向过程:里氏替换
前面有几篇文章,已经教了一些方式或者方法,帮助您摆脱娘胎自带的面向过程编程,从而转为面向对象。如果您有一路仔细看的话,相信我,您应该可以掌握的,后面还会再举一些面向对象的代码实操例子,一步一步演练如何编写出面向对象的代码。我会尽量多举几个例子,多写几篇实战演练,以便您掌握面向对象,现在先继续学面向对象的基础知识。本文讲解面向对象的原则之一:里氏替换。一、原则起源里氏替换原则的内容可以描述为: “派生类(子类)对象可以在程式中代替其基类(超类)对象。” 以上内容并非利斯科夫的原文,而是译自罗伯原创 2020-11-12 09:35:07 · 241 阅读 · 1 评论 -
C#教您一步步摆脱面向过程:开闭原则
前面有几篇文章,已经教了一些方式或者方法,帮助您摆脱娘胎自带的面向过程编程,从而转为面向对象。这是一篇文字较多的文章,您需要静心阅读,仔细理解,会让您比较好的掌握知识点。文章的例子使用中文编码,是为了让您便于理解,实际开发中不宜使用中文。开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”。据说这是原话,我也不知道是不是。一、理解开闭原则开闭原则包含以下几层意思:1.可以通过继承(抽象类)或者实现(接口)的方式,来实现“闭”。2.可以通原创 2020-11-14 21:18:36 · 263 阅读 · 0 评论