多线程,异步,任务和并行
1.异步和多线程应用场景区分
多线程 计算密集型工作
异步 IO密集型工作
2.线城同步中使用信号量
EventWaitHandle AutoResetEvent ManualResetEvent
Semaphore
Mutex
3.避免锁定不恰当的同步对象
1.需要同步的多个线程中是可见的同一个对象
2.非静态方法,静态变量不能作为同步对象
3.值类型对象不能作为同步对象
4.避免将字符串作为同步对象
5.降低同步对象的可见性
4.警惕线城的IsBackground
前台线城->线城不结束,主进程不结束
后台线城->主进程结束,线城自动结束
5.警惕线城的优先级
Thread.Priority = ThreadPriority.Highest
6.正确的关闭线城
CancellationToeknSource类的Token.isCancellationRequested方法
7.用ThreadPool或BackgroundWorker代替Thread
8.PLINQ
varqueryParaller1 = from p in intList.AsParallel().AsOrdered() select p;
queryParalle1.ForAll((item) =>…});
架构篇
成员设计
1.谨慎将数组或集合作为属性
public Ilist<Object> Employees {get;private set;}
2.构造方法应初始化主要属性和字段
3.区别对待override和new
子类方法中带有new-> 独立于基类的方法
子类方法中带有override->调用该方法,而非基类的方法
4.成员应优先考虑公开基类或接口
public Ienumberable<Tresult> Empty<Tresult>(){return EmptyEnumerable<Tresult>.Instance;}
5.优先考虑将基类型或接口作为参数传递
public static Ienumberable<Tsource> Task<Tsource>(this Ienumberable<Tsource>source, int count)
6.用params减少重复参数
void Method(string str, params object[] args){}
7.静态方法和实例方法没有区别
8.使用扩展方法,向现有类型“添加“方法
public static string GetSexString(this Student student){return "";}
优点 可以扩展密封类型
可以扩展第三方程序集中的类型
扩展方法可以避免不必要的深度继承体系
约定 扩展方法必须放在静态类中,且该类不能是嵌套类
扩展方法必须是静态的
扩展方法的第一个参数必须是要扩展的类型,且必须加上this
不支持扩展属性,事件(能扩展接口,例如Linq)
类型设计
1.区分接口和抽象类的应用场合
区别 接口支持多继承,抽象类则不能
接口可以包含方法,属性,索引器,事件的签名,但不能有实现,抽象类可以
接口新增方法后,所有继承者都需要重构,抽象类不需要
场景 对象存在多个功能相近且关系紧密,使用抽象
关系不紧密,若干功能有共同的声明,使用接口
抽象适用于提供丰富功能的场合,接口倾向于提供单一的一组功能
实例 流(stream):抽象 类型(Object):接口
2.多态代替条件语句
3.使用私有化构造函数强化单例
4.静态类添加静态构造函数
特点 只被调用一次,且在第一次调用类成员之前被运行时执行
代码无法调用它,不像实例构造方法使用new就能执行
没有访问标识符
不能带任何参数
5.sealed:组织类型被其它类继承
6.类代替enum
7.避免双向耦合
A调用B,B调用A
8.将现实世界的对象抽象为类,将可复用对象圈起来就是命名空间
安全性设计
1.声明变量前考虑最大值
ushort最大后会变为0,使用checked{}来抛出此类异常
2.MD5不在安全
3.通过HASH来验证文件是否被篡改
using(MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()){
using(FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)){
return BitConvert.ToString(md5.ComputeHash(fs)).Replace(""-"", """");
}
}
4.避免非对称算法加密文件
5.使用SSL确保通信中的数据安全
6.使用SecureString保存密钥等机密字符串
static Ssytem.Security.SecureSeting secureString = new SecureString();
保存:secureString.AppendChar('w');
取:IntPtr addr = Marshal.SecureStringToBSTR(secureString);
string temp = Marshal.PtrToStringBSTR(addr);
释放:Marshal.ZeroFreeBSTR(addr);
7.不要使用自己的加密算法
DES,AES,RC4,RSA,TEA,MD5
密钥是关键
8.为程序集指定强名称
sn -k yourprofile.snk
命名规范
以<Company>.<Component>为命名空间
用名词和名词组给类型命名
用形容词组给接口命名
派生类的名词以基类的名字作为后缀
泛型类型参数以T作为前缀
以复数命名枚举类型,以单数命名枚举元素
用PascalCasing命名公开元素
考虑用类名作为属性名
用camelCasing命名私有字段和局部变量
有条件的使用前缀
代码整洁
表驱动
static void Main(string[] args){
SampleClass sample = new SampleClass();
var addMethod = typeof(SampleClass).GetMethod(ActionInTable(WeekMonday));
addMethod.Invoke(sample, null);
}
static string ActionInTable(Week week){
string[] methods = {""Cleaning"", ""CleanCloset"", ""Quarrel"", ""Shopping""};
return methods[(int)week];
}
class SampleClass{
public void Cleaning(){Colsole.WriteLine(""打扫"");}
public void CleanCloset(){Console.WriteLine(""吵架"");}
}
使用时间访问器替代公开的事件成员变量
规范化开发
自动化测试(黑盒)
Code UI Automation

C#如何提高代码质量(二)的更多相关文章

  1. 提高代码质量 CheckStyle FindBugs PMD

    提高代码质量-工具篇 注:这是一篇翻译文章,原文:How to improve quality and syntax of your Android code,为了理解连贯,翻译过程中我修改了一些陈述 ...

  2. Findbug在项目中的运用--提高代码质量

     FindBugs是一个静态分析工具,它检查类或者 JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析 第一 手动安装 在Ec ...

  3. Web前端开发最佳实践(11):使用更严格的JavaScript编码方式,提高代码质量

    前言 JavaScript语言由于其固有的灵活性,所以导致开发者可以写出很多诡异的代码,甚至一些较为正常的特性,如类型隐式转换.this的指代等等,也会让刚接触此语言的开发者头大不已.尤其是那些熟知其 ...

  4. (转)提高代码质量---one

    1. 摘要 这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣. 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao ...

  5. SonarQube与Jenkins结合提高代码质量

    首先,为什么需要SonarQube? 1.WriteClean Code 1)全局健康报告  2)关注新增的问题  3)强制QualityGate 4)Issue详情及建议- 详情参考:https:/ ...

  6. 用 Eclipse 插件提高代码质量

    如果能在构建代码前发现代码中潜在的问题会怎么样呢?很有趣的是,Eclipse 插件中就有这样的工具,比如 JDepend 和 CheckStyle,它们能帮您在软件问题暴露前发现这些问题.在 让开发自 ...

  7. 提高代码质量系列之二:重构小技巧——if篇

    前言: if,相信是童鞋们使用的最频繁的关键字了,而且很多时候,我们使用的if都是在无意识的状态下随手而为.键入if,两下回车(我使用了resharper,可以自动编排if的格式),再信手写下我们需要 ...

  8. 测试驱动开发(Test-Driven Development,简称TDD)--单元测试-->提高代码质量

    !!! 1.估算和做项目计划时要算上单元测试时间 2.开发之前写单元测试代码 盖房子的时候,工人师傅砌墙,会先用桩子拉上线,以使砖能够垒的笔直,因为垒砖的时候都是以这根线为基准的.TDD就像这样,先写 ...

  9. linux 提高代码质量的工具

    很多IT公司对于软件开发都有严格的分工,这包括设计.测试.服务支持等等.但是,我一直都认为只有开发者才是真正对软件质量负责的人.没有好的软件设计,软件质量基本上是无从谈起.当然,要做到这一点是需要额外 ...

  10. 使用flow捕获js错误提高代码质量

    本文将介绍Flow及其主特性.下面分别从如何安装设置,如何添加类型注释,如何在运行时自动去掉注释等方面来介绍. 安装 目前Flow兼容的操作系统有Mac OS X,Linux(64位),Windows ...

随机推荐

  1. elasticsearch多字段聚合实现方式

    目录 1.背景 2.实现多字段聚合的思路 3.需求 4.数据准备 4.1 创建索引 4.2 准备数据 5.实现方式 5.1 multi_terms实现 5.1.1 dsl 5.1.2 java 代码 ...

  2. Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)漏洞复现

    目录 免责声明: CVE-2022-30190漏洞复现 漏洞概述: 影响版本: 漏洞复现: 使用方法: 利用: 修复建议: 参考: 免责声明: 本文章仅供学习和研究使用,严禁使用该文章内容对互联网其他 ...

  3. Go语言核心36讲20

    在上两篇文章中,我主要为你讲解了与go语句.goroutine和Go语言调度器有关的知识和技法. 内容很多,你不用急于完全消化,可以在编程实践过程中逐步理解和感悟,争取夯实它们. 现在,让我们暂时走下 ...

  4. WSL优化之SSH远程登录篇

    Some of the most devastating things that happen to you will teach you the most. 有些最打击你的事情反而教会你的东西越多. ...

  5. 【云原生 · Kubernetes】runtime组件

    个人名片: 因为云计算成为了监控工程师‍ 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying runtime组件 8.1 部署cri-o组件 8.2 下载二进制文件 8.3 修改配置文件 ...

  6. 流程编排、如此简单-通用流程编排组件JDEasyFlow介绍

    作者:李玉亮 JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排.工作流.审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-ea ...

  7. 文件服务器 — File Browser

    前言 一直想部署一套文件服务器,供队友之间相互传输文件.平时用微信发送文件真的太烦了,每发送或者接收一次都会有一个新的文件,造成重复文件太多了.文件服务器统一管理,自己需要什么文件再下载. 前面也安装 ...

  8. 【大数据面试】【数仓项目】分层:ODS层、DWD层、DWS层、ADS层构成、操作

    一.ODS层 1.保持数据原貌,不做任何修改 2.数据压缩:LZO压缩,减少磁盘空间 3.创建的是分区表:可以防止后续的全表扫描 包括 用户行为:string line dt    ods_start ...

  9. python中的字符串(1)

    1.大小写的转换 upper()/lower() 转成大写.upper() 转成小写.lower() 返回的是字符串 2.是否是数字 isdigit() 返回的布尔值 3.去除字符串的空白字符 str ...

  10. Windows11家庭中文版——启用或关闭Windows功能中找不到hyper解决方法

    Windows11家庭中文版找不到hyper解决方法: 1.将如下代码添加到记事本中,并另存为[Hyper-V.bat]文件,代码如下: pushd "%~dp0" dir /b ...