title author date CreateTime categories
dotnet core 编程规范
lindexi
2018-08-10 19:16:52 +0800
2018-05-06 14:57:14 +0800
dotnet

本文实际只是翻译 .NET Core foundational libraries 官方文档的编码风格。

.NET Core foundational libraries项目使用的编程规范默认就是 VisualStudio 默认样式。

花括号

花括号使用 Allman style 风格,所有的花括号在新的一行开始。

关于 Allman style 就是如下,花括号放在下一行,而且花括号不进行缩进,花括号里面的代码缩进。

while (x == y)
{
something();
somethingelse();
}

但是对于单行的语句,可以不添加花括号,但是请把它放在同一行

          if (xx == null) xx = new Foo();

单行语句同样建议添加花括号避免苹果的bug

如果不添加花括号,一定不要在嵌套时使用。

空格

使用 4 个空格作为一个缩进,而不是使用 tab

字段

所有的字段使用_camelCase风格,而且尽可能使用readonly 。在 internal 和 private 访问的字段添加 _ 前缀,对于静态的字段添加s_前缀,对于线程静态的字段添加t_前缀。如果使用了静态的字段而且可以设置readonly ,需要把readonly 放在static后面。

最好不要公开字段,如果需要公开那么使用PascalCasing风格而且不添加前缀。

我不是很赞同对字段的风格,但是因为本文是翻译,我就没有添加自己的理解。

限定

不要添加 this. ,完全是没必要的。

我也不是很赞同这个,因为如果使用扩展方法,需要使用this.

访问

显示指定访问,即使访问是默认的,如private string _foo ,而不是string _foo。访问需要放在最前面,如public abstract,不建议abstract public

默认的访问是可能修改的

命名空间

对于引用需要放在文件的开头。

空行

禁止超过一行的空白,不可以使用两行空白。

不要使用两行分割两个类型。

多余空格

禁止在一行结束添加多余空格。通过 VisualStudio 的查看空格(ctrl+E,S)可以看到空格

参照现有

如果一个文件在格式规范定义之前已经有自己的规范,尽可能参照文件现有的规范而不是去修改他。

新的修改参照现有的文件的格式。

我一点都不赞同。

明显的类型

只能在明显可以知道对象类型可以使用 var ,如var stream = new FileStream(...) 。在无法明显知道对象类型不可以使用 var ,如var stream = OpenStandardInput()

关键字

使用语言的关键字代替 BCL 类型,如使用 int, string, float代替Int32StringSingle

常量命名

对于所有的常量,包括静态只读,使用 PascalCasing 风格。如果需要使用 C++ 或其他代码对于命名有要求才可以使用其他的方法。

变量名字符串

如果使用变量名的常量,必须使用 nameof 关键字。

字段结构

字段必须放在一个类声明的最前面。

我一点都不赞成,因为谁会去管一个类的字段,我关心的是构造函数和公开属性、函数。

其他字符

如果在代码使用了 非 ascii 的字符,那么需要把他转换为 \uxx 方式,这样可以解决一些非 ascii 因为编译器分析的问题。

当然上面的要求只是对于编译的代码

Label

使用 Label 缩进一个小于当前缩进的标签

原文:coding-style.md

2018-8-10-dotnet-core-编程规范的更多相关文章

  1. dotnet core 编程规范

    本文实际只是翻译 .NET Core foundational libraries 官方文档的编码风格 在 .NET Core foundational libraries项目使用的编程规范默认就是 ...

  2. ubuntu15.10 或者 16.04 或者 ElementryOS 下使用 Dotnet Core

    这里我们不讲安装,缺少libicu52自行安装. 安装完成后使用dotnet restore或者build都会失败,一是报编译的dll不适合当前系统,二是编译到ubuntu16.04文件夹下会产生一些 ...

  3. .Net基础——程序集与CIL HttpClient封装方法 .Net Core 编码规范 C#中invoke和beginInvoke的使用 WebServeice 动态代理类

    .Net基础——程序集与CIL   1. 程序集和CIL: 程序集是由.NET语言的编译器接受源代码文件产生的输出文件,通常分为 exe和dll两类,其中exe包含Main入口方法可以双击执行,dll ...

  4. flex+AS3编程规范

    flex+AS3编程规范 Flex+AS3编码规范 http://www.cnblogs.com/jiahuafu/   1.  缩写: 尽量避免使用缩写,使用缩写时尽量和Flex保持一致.但要记住一 ...

  5. 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)

    作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https ...

  6. devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务

    使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...

  7. Dotnet core基于ML.net的销售数据预测实践

    ML.net已经进到了1.5版本.作为Microsoft官方的机器学习模型,你不打算用用?   一.前言 ML.net可以让我们很容易地在各种应用场景中将机器学习加入到应用程序中.这是这个框架很重要的 ...

  8. 探索 dotnet core 为何在 Windows7 系统需要补丁的原因

    在一些 Windows 7 系统上,根据 dotnet 官方文档,需要安装上 KB2533623 补丁,才能运行 dotnet core 或 .NET 5 等应用.尽管非所有的设备都需要安装此,但这也 ...

  9. Windows 10 IoT Serials 3 - Windows 10 IoT Core Ardunio Wiring Mode

    Maker社区和智能硬件的朋友一定知道Arduino,很多3D打印机都是用它做的.为了迎合这一大块市场,微软在基于Intel Galileo的Windows 8.1 IoT中就是使用这种基于Ardui ...

  10. Batsing的网页编程规范(HTML/CSS/JS/PHP)

    特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...

随机推荐

  1. 一个优雅的图片裁剪插件vue-cropper

    github:  https://github.com/xyxiao001/vue-cropper

  2. linux下vsftpd的安装及配置使用详细步骤(推荐)

    vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点. vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux.BS ...

  3. maven 高级玩法

    maven 高级玩法 标签(空格分隔): maven 实用技巧 Maven 提速 多线程 # 用 4 个线程构建,以及根据 CPU 核数每个核分配 1 个线程进行构建 $ mvn -T 4 clean ...

  4. c++函数相关

    1,内连函数 inline 返回值类型 函数名(形参列表) 普通函数成为内连函数:在普通函数声明之前加上inline 成员函数成为内连函数:在类中定义的函数全部默认为内连函数,可以显示加上inline ...

  5. phpstorm的下载激活及定制使用和设置

    1.下载地址: 链接:https://pan.baidu.com/s/19PbZnzq0x7grgBge-iHI3w&shfl=sharepset  提取码:dnte 2.激活码获取:http ...

  6. Java 简单工厂

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  7. php 防盗链

    防盗链的技术已经很普遍了,有些网站不喜欢自己的图片被别的网站直接复制使用,便使用了防盗链的技术,这样别人在直接复制使用网站图片时,图片便会按照程序的设定不显示或显示防盗链等字样. 使用了防盗链技术,不 ...

  8. 网络协议之TCP/IP协议

    沙漏计时器型TCP/IP协议族,允许IP on everyting,即支持多种形式和物理层和数据链路层实现:同时支持多种多样的应用层协议,扩展了各式各样的服务. IP协议(网际协议) 与IP协议配套使 ...

  9. TiDB单机安装测试

    TiDB单机安装测试 CentOS7.3安装MySQL5.6 1:下载TiDB安装包# cd /opt/source# wget http://download.pingcap.org/tidb-la ...

  10. Flink组件及特性

    Flink 是一个针对流数据和批数据的分布式处理引擎.它主要是由 Java 代码实现.目前主要还是依靠开源社区的贡献而发展.对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个 ...