C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。
文章浏览阅读153次。桥接模式(Bridge Pattern)是将抽象部分与它的实现部分分离,使它们都可以独立地变化,使得设计更具扩展性,其实现细节对客户透明。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式。在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,就需要使用桥接模式(Bridge Pattern)。由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度。_c# 代码设计模式的桥接模式
文章浏览阅读484次。适配器模式(Adapter Pattern)也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。适配器模式是一种结构型模式,一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(2)对象适配器模式。_c# 适配器模式
文章浏览阅读583次。工厂方法模式(Factory Method)的出现解决简单工厂中的难以拓展的问题,解决了其一旦添加新的产品,则需要修改简单工厂方法,进而造成简单工厂的实现逻辑过于复杂。工厂方法模式通过面向对象编程中的多态性来将对象的创建延迟到具体工厂中,把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,工厂方法模式就可以允许系统不修改工厂类逻辑的情况下来添加新产品,也就克服了简单工厂模式中缺点。工厂方法模式也是属于创建型模式。_c#实现工厂模式
文章浏览阅读1.2k次。反射提供描述程序集、模块和类型的对象(Type 类型)。可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。如果代码中使用了特性(Attribute),可以利用反射来访问它们。本文主要介绍C# 反射(Reflection)。_c# 反射使用场景
文章浏览阅读404次。命令模式(Command Pattern)是一种对象行为模式,分离了接受请求的对象与实现处理请求工作的对象,在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,将一组行为抽象为对象,实现二者之间的松耦合。这样,已经存在的类可以保持不变,使得增加新类的工作更简单。例如,很多软件的宏命令就提高了系统的自动化程度。命令模式还可以分离用户界面和业务对象,降低系统的耦合度。_c# 命令模式
文章浏览阅读840次。原型模式(Prototype Pattern) 是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。C# 提供了 ICloneable 接口,用 C# 实现原型模式很简单。(1)使用Object的MemberwiseClone() 方法。(2)使用ICloneable接口。
文章浏览阅读9.1k次,点赞2次,收藏11次。三种方式各有用处,根据你的项目情况来选择,比较单一普通的推荐用第一个,第二种和第三种方法比较复杂的list使用。List是C#常用的数组,它较之前的ArryList更加灵活,解决了Arrylist会出现装箱和拆箱的不安全问题,它是一种动态数组,可以存储对象或元素的集合。在处理比多的数据时,对list排序也非常重要,这样可以对数据更加容易的处理。OrderBy方法可以安装list中的指定元素升序排序,而ThenBy方可以附件排序按升序排序。这是C#最常用的排序方法,此方法可以让list按升序的方式排列。_c# list 排序
文章浏览阅读431次。Linq是Language Integrated Query的简称,它是微软在.NET Framework 3.5里面新加入的特性,用以简化查询查询操作。以下介绍.NET(C#) 中Linq的GroupBy和GroupJoin操作符。_c# groupjoin
文章浏览阅读1k次。责任链模式(Chain of Responsibility)是一种对象行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。也就是通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。_c#责任链模式
文章浏览阅读250次。装饰者模式(Decorator Pattern)是指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。装饰对象包含一个真实对象的引用(reference)。装饰对象接受所有来自客户端的请求。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。设计原则就是多组合,少继承。_c#装饰者设计模式
文章浏览阅读62次。状态模式(State Pattern)是一种行为型模式,又叫做快照模式。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。状态模式在工作流或游戏等各种系统中大量使用。_c#设计模式之状态模式
文章浏览阅读309次,点赞2次,收藏3次。(lambda表达式本来也是方法定义的一种简化形式)。_c#varevent
文章浏览阅读1.8k次。进程作为操作系统执行程序的基本单位,拥有应用程序的资源,进程包含线程,进程的资源被线程共享,线程不拥有资源。通过Thread类新建线程默认为前台线程。当所有前台线程关闭时,所有的后台线程也会被直接终止,不会抛出异常。由于线程的执行顺序和程序的执行情况不可预知,所以使用挂起和唤醒容易发生死锁的情况,在实际应用中应该尽量少用。使用线程的作用:1)可以使用线程将代码同其他代码隔离,提高应用程序的可靠性。2)可以使用线程来简化编码。3)可以使用线程来实现并发执行。_c# task与thread
文章浏览阅读114次。但是从对比来看,dynamic在低数量调用的使用上性能要比反射弱太多,比较大的数量调用来说它们不相上下。建议如果你的代码对性能要求不太高的情况下,可以使用dynamic来简化反射。可以看到,使用dynamic来简化反射实现可以将代码变得更加简洁易读,同时也可以避免一些繁琐的反射操作。使用dynamic来简化反射实现是一种比较常见的编程技巧,它可以减少代码的复杂性并提高可读性。这里首先新建一个类和一个两数相加的方法,然后分别使用反射和dynamic来调用这个类的方法,并循环数次,来对比它们的性能。_dynamic 反射
文章浏览阅读684次。建造者模式(Builder Pattern)是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道产品内部组成的细节,从而降低了客户端与具体产品之间的耦合度。使用多个简单的对象一步一步构建成一个复杂的对象。属于创建型模式,它提供了一种创建对象的最佳方式。_c# 建造者模式
文章浏览阅读694次。以上讲述了C#如何使用ObjectPool来提高StringBuilder性能的方法,并用案例对比测试了使用StringBuilder和使用ObjectPool的情况,由测试结果来看,并非在所有情况使用ObjectPool效率就高,也正如StringBuilder在数据量小的情况下不推荐使用。在C#中我们知道使用StringBuilder能提高大量字符串拼接的效率,其实StringBuilder的效率也可以提升,那就是使用ObjectPool。_c# objectpool 池化集合如何提升性能了
文章浏览阅读868次。策略模式(Stragety Pattern)是一种对象行为模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是 “在美国交个人所得税” 和 “在中国交个人所得税” 就有不同的算税方法。策略模式提供了替代派生的子类,并定义类的每个行为,剔除了代码中条件的判断语句,使得扩展和结合新的行为变得更容易,根本不需要变动应用程序。策略模式可以避免使用多重条件转移语句,系统变得更新灵活。应用策略模式会产生很多子类,这符合高内聚的责任分配模式。_c#策略模式
文章浏览阅读91次。访问者模式(Vistor Pattern)是一种行为型模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。元素类可以通过接受不同的访问者来实现对不同操作的扩展。Visitor(访问者)模式使得增加新的操作变得容易,它可以收集有关联的方法,而分离没有关联的方法,特别适用于分离因为不同原因而变化的事物。_c# 访问者模式
文章浏览阅读825次。迭代器模式(Iterator Pattern)是一种对象行为模式,提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。支持在聚集中移动游标,使得访问聚合中的元素变得简单,简化了聚集的接口,封装了聚合的对象。迭代器模式还可以应用于对树结构的访问,程序不需要从头逐行代码查找相应位置,可控制到从子集开始查找。它支持以不同的方式遍历一个集合,为遍历不同的集合结构提供一个统一的接口,迭代器简化了集合的接口,在同一个集合上可以有多个遍历。_c# 迭代器模式
文章浏览阅读364次。组合模式(Composite Pattern)可以清楚地定义分层次的复杂对象,表示对象的全部或部分层次,使得增加新部件也更容易,它让客户忽略了层次的不同性,而它的结构又是动态的,提供了对象管理的灵活接口。组合模式对于树结构的控制有着神奇的功效,用户对单个对象和组合对象的使用具有一致性。组合模式解耦了客户程序与复杂元素内部结构,从而使客户程序可以像处理简单元素一样来处理复杂元素。也是一种结构型模式。_组合模式 文件夹访问 c#
文章浏览阅读135次。数组在内存上连续分配的,而且数组中元素类型是一样的可以下标访问,数据读取快但增删慢,长度不变。,内存上都是连续摆放不定长;泛型使用保证类型安全,可以避免装箱拆箱,数据读取快但增删慢。是不定长的,内存上是连续分配的,其中元素没有类型限制,任何元素都是当成。处理,如果是值类型,会有装箱操作。数据读取快但增删慢。_.net list[0]
文章浏览阅读250次。为了方便操作apk 实现app的自动化点击 封装了个adb操作类。基本上的操作都有了,如果配合好C# 程序和模拟器 基本上什么样的操作都可以实现。_c# adb
文章浏览阅读180次。在接口方法GetObjectData完成序列化,把信息保存到SerializationInfo中,在构造函数中反序列化,把信息从SerializationInfo中读取出来。以上,我们想序列化Car的集合到文件中,再反序列化Cars的集合读取出来。那么,我们必须让Car可以被序列化和反序列化,Car的属性对象Owner也必须可以被序列化和反序列化。如果一个集合对象需要实现序列化和反序列化,那么集合元素对象必须可以被序列化和反序列化,并且集合元素对象中的对象属性也必须可以被序列化和反序列化,依此类推。_序列化和反序列化之间的对象版本更改
文章浏览阅读92次。我觉得 is 的功能增强早就该出现了,现在终于搞定了,越来越人性化,键盘敲击次数越来越少,头发也不落了,甚至又开始第二春了,总的来说还是那句话,C# 大法
文章浏览阅读1.3k次。但是很多情况下,我们接收到的其实都是一份接口文档,在文档中利用表格标明了字段的名称、备注、类型等,而关于json什么的都是后来才有的,或者说,传输根本不用json。所以,综上场景所述,我们需要一个小工具,可以将表格数据直接转换为c#代码,当然,本着通用化的思想,小工具当然不会单纯的做一个读取excel文件的功能,这样一点也不好用,因为由其他地方提供的文档有的是excel,有的是word,所以,我们利用剪切板来做,只要解析剪切板的数据就可以了。.NET Framework版本:4.7.2。_根据表格在线生成实体
文章浏览阅读4k次。ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。而ZXing.Net是ZXing的端口之一。本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正。关于生成条形码和二维码的方式有很多,条码的种类也有很多种,每一种都有其对应的应用领域。如下所示,包含一维条码,二维条码,和带logo的条码。_c# zxing
文章浏览阅读119次。一个声明为Action的类型被赋给了一个Action,大家都知道,Action接收参数,没有返回值,所以其中的object和string是其参数,这个过程其实就是参数的约束更加强了,也就是说让参数类型更加精细化。看到过几篇协变和逆变的文章,但是总觉得写得不够清晰,文章这东西注重要是要把自己想表达的观点表达出来,这个过程应该是把复杂的东西消化出来从而简单化,清晰化,而不是故弄玄虚,反其道而行之,下面我们言归正传啦。那什么又是协变和逆变呢?OO中多态的一个延伸。_c# 裂变
文章浏览阅读1.2k次。为什么要用到深拷贝呢?比如我们建了某个类Person,并且实例化出一个对象,然后,突然需要把这个对象复制一遍,并且复制出来的对象要跟之前的一模一样,来看下我们一般会怎么做。_c#深拷贝的三种实现方式
文章浏览阅读566次。核心思路是使用Region的求交集和并集的结果与原始Region对比,先看效果 Winform项目自带这个类库,如果使用控制台,需要先在nuget安装System.Drawing.Common核心代码如下:代码下载:_不规则图形求交集
文章浏览阅读3.2k次。Spinlock 是内核中提供的一种比较常见的锁机制,自旋锁是“原地等待”的方式解决资源冲突的,即,一个线程获取了一个自旋锁后,另外一个线程期望获取该自旋锁则获取不到,只能够原地“打转”(忙等待)。Mutex和Monitor很接近,但是没有Monitor.Pulse,Wait,PulseAll的唤醒功能,他的优点是可以跨进程,可以在同一台机器甚至远程机器人的不同进程间共用一个互斥体。本文章汇总c#中常见的锁,基本都列出了该锁在微软官网的文章,一些不常用的锁也可以参考微软文章左侧的列表,方便温习回顾。_c# 锁