-
[C#] 编写高质量代码改进C#程序的157个建议——建议12: 重写Equals时也要重写GetHashCode
编写高质量代码改善C#程序的157个建议——建议12:重写Equals时也要重写GetHashCode建议12:重写Equals时也要重写GetHashCode除非考虑到自定义类型会被用作基于散列的集合的键值;否则,不建议重写Equals方法,因为这会带来一系列的问题。如果编译上一个建议中的Pers...
6
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议10: 创建对象时需要考虑是否实现比较器
编写高质量代码改善C#程序的157个建议——建议10:创建对象时需要考虑是否实现比较器建议10:创建对象时需要考虑是否实现比较器有对象的地方就会存在比较,在.NET的世界中也一样。举个最简单的例子,在UI中,有一个10个人的Salary列表。根据排序的需要,列表要支持针对基本工资来罗列Salary。...
9
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议6: 区别readonly和const的使用方法
编写高质量代码改善C#程序的157个建议——建议6:区别readonly和const的使用方法建议6:区别readonly和const的使用方法很多初学者分不清readonly和const的使用场合。在我看来,要使用const的理由只有一个,那就是效率。但是,在大部分应用情况下,“效率&...
94
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议5: 使用int?来确保值类型也可以为null
编写高质量代码改善C#程序的157个建议——建议5:使用int?来确保值类型也可以为null建议5:使用int?来确保值类型也可以为null基元类型为什么需要为null?考虑两个场景:1)数据库中一个int字段可以被设置为null。在C#中,值被取出来后,为了将它赋值给int类型,不得不首先判断一下...
7
热度 -
[C#] 一个简略的c#打字游戏
一个简单的c#打字游戏。//这是入口点usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceKEYGAME...
97
热度 -
[C#] C#复建经典全面汇总
C#重构经典全面汇总C#重构经典全面汇总1、封装集合概念:本文所讲的封装集合就是把集合进行封装,只提供调用端需要的接口。正文:在很多时候,我们都不希望把一些不必要的操作暴露给调用端,只需要给它所需要的操作或数据就行,那么做法就是封装。这个重构在微软的代码库也经常遇到。比如最经典的属性对字段的封装就是...
117
热度 -
[C#] List<T>线性查寻和二分查找BinarySearch效率分析
List<T>线性查找和二分查找BinarySearch效率分析今天因为要用到List的查找功能,所以写了一段测试代码,测试线性查找和二分查找的性能差距,以决定选择哪种查找方式。线性查找:Contains,Find,IndexOf都是线性查找。二分查找:BinarySearch,因为二分...
54
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议22:确保集合的线程安全
编写高质量代码改善C#程序的157个建议——建议22:确保集合的线程安全建议22:确保集合的线程安全集合线程安全是指多个线程上添加或删除元素时,线程键必须保持同步。下面代码模拟了一个线程在迭代过程中,另一个线程对元素进行了删除。classProgram{staticList<Person>...
13
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议16:元素数量可变的情况下不应使用数组
编写高质量代码改善C#程序的157个建议——建议16:元素数量可变的情况下不应使用数组建议16:元素数量可变的情况下不应使用数组在C#中,数组一旦被创建,长度就不能改变。如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List<T>来创建。而数组本身,尤其是一维数组,...
34
热度 -
[C#] 使用.net 的Chart控件作图曲线图
使用.net的Chart控件绘制曲线图在进行软件开发过程中我们可能会碰到需要生成图表的情况,在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图、柱状图什么的了。废话不多说,直接附上代码,实现绘...
16
热度 -
[C#] EmguCV学习——简略算法 差分与高斯
EmguCV学习——简单算法差分与高斯公司项目需要检测运动物体,我对opencv也没啥研究,google了好久看了好多方法,最简单的就是差分与高斯背景建模了。旁边搞c++的同事正在搞更nb的算法,等出来了我再转成C#版的分享。先看差分1//移动窗口[System.Runtime.InteropSer...
81
热度 -
40
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议20:使用泛型集合代替非泛型集合
编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合建议20:使用泛型集合代替非泛型集合在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型。很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看ArrayList这个类的使用情...
70
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议18:foreach不能代替for
编写高质量代码改善C#程序的157个建议——建议18:foreach不能代替for建议18:foreach不能代替for上一个建议中提到了foreach的两个优点:语法更简单,默认调用Dispose方法,所有我们强烈建议在实际的代码编写中更多的使用foreach。但是,该建议也有不适合的场景。for...
95
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议61:避免在finally内撰写无效代码
编写高质量代码改善C#程序的157个建议——建议61:避免在finally内撰写无效代码建议61:避免在finally内撰写无效代码在阐述建议之前,需要先提出一个问题:是否存在一种打破try-finally执行顺序的情况,答案是:不存在(除非应用程序本身因为某些很少出现的特殊情况在try块中退出)。...
39
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议39:了解委托的实质
编写高质量代码改善C#程序的157个建议——建议39:了解委托的实质建议39:了解委托的实质理解C#中的委托需要把握两个要点:1)委托是方法指针。2)委托是一个类,当对其进行实例化的时候,要将引用方法作为它的构造方法的参数。设想这样一个场景:在点对点文件传输过程当中,我们要设计一个文件传输类,该传输...
49
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议57:实现ISerializable的子类型应负责父类的序列化
编写高质量代码改善C#程序的157个建议——建议57:实现ISerializable的子类型应负责父类的序列化建议57:实现ISerializable的子类型应负责父类的序列化我们将要实现的继承自ISerializable的类型Employee有一个父类Person,假设Person没有实现序列化,...
19
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议55:利用定制特性减少可序列化的字段
编写高质量代码改善C#程序的157个建议——建议55:利用定制特性减少可序列化的字段建议55:利用定制特性减少可序列化的字段特性(attribute)可以声明式地为代码中的目标元素添加注释。运行时可以通过查询这些托管块中的元数据信息,达到改变目标元素运行时行为的目的。System.Runtime.S...
21
热度 -
[C#] 编写高质量代码改进C#程序的157个建议——建议32:总是优先考虑泛型
编写高质量代码改善C#程序的157个建议——建议32:总是优先考虑泛型建议32:总是优先考虑泛型泛型的优点是多方面的,无论泛型类还是泛型方法都同时具备可重用性、类型安全性和高效率等特性,这是非泛型和非泛型方法无法具备的。以可重用性为例:classMyList{privateint[]items;pu...
13
热度 -
[C#] C#应用程序只允许运作一个实例,多次运行的时候激活当前实例,显示其界面
C#应用程序只允许运行一个实例,多次运行的时候激活当前实例,显示其界面很多时候,我们开发的程序,需要单例运行的的功能,即整个应用程序只允许同时运行最多一个实例,重复运行的时候,激活当前实力,显示其界面。在C#程序中,其解决方案有多重,可以参照CharlesChen的C#程序只允许运行一个实例的解决方...
7
热度