以Google的代码规范为主,稍加改动 https://google.github.io/styleguide/csharp-style.html

书写规范

基础写法

  1. Pascal和驼峰混用,参数用驼峰写法,除参数外,都以Pascal写法为主。
  2. 括号建议用换行方式书写

Code

  • 类, 方法, 枚举, public 字段, public 属性, 命名空间的命名规则用PascalCase.
  • 局部变量,函数参数命名规则用: camelCase.
  • private, protected, internal and protected internal 字段和属性的命名规则用: _camelCase.
  • 命名规则不受const, static, readonly等修饰符影响.
  • 对于缩写,也按PascalCase 命名,比如 MyRpc而不是MyRPC.
  • 接口以I,开头..

Files

  • 文件和文件夹 命名规则为PascalCase, 例如 MyFile.cs.
  • 文件名尽量和文件中主要的类名一直, 例如 MyClass.cs.
  • 通常,一个文件中一个类.

Organization

  • 如果出现,修饰符按下列顺序书写: public protected internal private new abstract virtual override sealed static readonly extern unsafe volatile async.
  • 命名空间在最顶部,using顺序按Sytem,Unity,自定义的命名空间以及字母顺序排序,
  • 类成员的顺序:
    • Group按下列顺序:

      • Nested classes, enums, delegates and events.
      • Static, const and readonly fields.
      • Fields and properties.
      • Constructors and finalizers.
      • Methods.
    • 每个Group内,按下列顺序:
      • Public.
      • Internal.
      • Protected internal.
      • Protected.
      • Private.
    • 接口的实现尽可能安排写在一起

注释规范

代码头部注释
文件名称:文件的名称。
功能描述:文件的功能描述与大概流程说明。
作者:创建并编写的人员。
日期:创建并编写的日期。
修改记录:若类有所修改,则需要有修改人员的名字、修改日期及修改理由。

// 文件名称:UserInput.cs

// 功能描述:玩家输入按键的定义

// 编写作者:张三

// 编写日期:2017.7.16

// 修改记录:

//      R1:

//          修改作者:李四

//          修改日期:2017.7.17

//          修改理由:使玩家可以自定义输入按键

Using System;

方法注释

采用 /// 形式自动产生XML标签格式的注释。包括方法功能,参数含义,返回内容

/// <summary>

/// 设置场景的名字.

/// </summary>

/// <returns><c>true</c>, 场景名字设置成功, <c>false</c> 场景名字设置失败.</returns>

/// <param name="sceneName">场景名字.</param>

public bool SetSceneName(string sceneName)

{

}

类变量注释

采用 /// 形式自动产生XML标签格式的注释变量含义。

/// <summary>

/// 场景的名字

/// </summary>

private string mSceneName;

局部变量注释

在变量声明语句的后面注释,与前后行变量声明的注释左对齐,注释与代码间以Tab隔开。

string firstName;   //姓

string lastName;    //名

代码行注释

注释位于代码上行,与代码开始处左对齐,双斜线与注释之间以空格分开

//设置场景的名字。

this.mSceneName = sceneName;

书写示例:


  1. using System; //using写在整个文件最前,多个using按下面层级以及字母排序
  2. using System.Collections; //1.system提供的
  3. using System.Collections.Generic;
  4. using UnityEngine; //2.unity提供的
  5. using UnityEngine.UI;
  6. using GameDataModule; //3.自定义的namespace
  7. namespace MyNamespace // Namespaces 命名规则为 PascalCase.
  8. {
  9. public interface IMyInterface // Interfaces 以 'I' 开头
  10. {
  11. public int Calculate(float value, float exp); // 方法函数 命名规则为 PascalCase
  12. }
  13. public enum MyEnum // Enumerations 命名规则为 PascalCase.
  14. {
  15. Yes = 0, // Enumerations 命名规则为 PascalCase,并显示标注对应值
  16. No = 1,
  17. }
  18. public class MyClass // classes 命名规则为 PascalCase.
  19. {
  20. public int Foo = 0; // Public 公有成员变量命名规则为 PascalCase.
  21. public bool NoCounting = false; // 最好对变量初始化.
  22. private class Results
  23. {
  24. public int NumNegativeResults = 0;
  25. public int NumPositiveResults = 0;
  26. }
  27. private Results _results; // Private 私有成员变量命名规则为 _camelCase.
  28. public static int NumTimesCalled = 0;
  29. private const int _bar = 100; // const 不影响命名规则.
  30. private int[] _someTable =
  31. {
  32. 2, 3, 4,
  33. }
  34. public MyClass() // 构造函数命名规则为 PascalCase.
  35. {
  36. _results = new Results // 对象初始化器最好用换行的方式赋值.
  37. {
  38. NumNegativeResults = 1, // 操作符前后用个空格分割.
  39. NumPositiveResults = 1,
  40. };
  41. }
  42. public int CalculateValue(int mulNumber)
  43. {
  44. var resultValue = Foo * mulNumber; // Local variables 局部变量命名规则为camelCase.
  45. NumTimesCalled++;
  46. Foo += _bar;
  47. if (!NoCounting) // if后边和括号用个空格分割.
  48. {
  49. if (resultValue < 0)
  50. {
  51. _results.NumNegativeResults++
  52. }
  53. else if (resultValue > 0)
  54. {
  55. _results.NumPositiveResults++;
  56. }
  57. }
  58. return resultValue;
  59. }
  60. public void ExpressionBodies()
  61. {
  62. //对于简单的lambda,如果一行能写下,不需要括号
  63. Func<int, int> increment = x => x + 1;
  64. // 对于复杂一些的lambda,多行书写.
  65. Func<int, int, long> difference1 = (x, y) =>
  66. {
  67. long diff = (long)x - y;
  68. return diff >= 0 ? diff : -diff;
  69. };
  70. }
  71. void DoNothing() {} // Empty blocks may be concise.
  72. void CallingLongFunctionName()
  73. {
  74. int veryLongArgumentName = 1234;
  75. int shortArg = 1;
  76. // 函数调用参数之间用空格分隔
  77. AnotherLongFunctionNameThatCausesLineWrappingProblems(shortArg, shortArg, veryLongArgumentName);
  78. // 如果一行写不下可以另起一行,与第一个参数对齐
  79. AnotherLongFunctionNameThatCausesLineWrappingProblems(veryLongArgumentName,
  80. veryLongArgumentName, veryLongArgumentName);
  81. }
  82. }
  83. }

Unity项目代码书写规范的更多相关文章

  1. WEB标准:标准定义、好处、名词解释、常用术语、命名习惯、浏览器兼容、代码书写规范

    1. WEB标准是什么? “WEB标准”是一系列标准的总称.一般的误区经常把WEB标准说成DIV+CSS.准确的说法应该是:采用W3C推荐的WEB标准中的XHTML1.1结合CSS2.0 样式表制作页 ...

  2. (转)Java代码书写规范

    0. 安装阿里代码规范的eclipse插件 https://www.cnblogs.com/caer/p/7753522.html 1.基本原则 强制性原则:     1.字符串的拼加操作,必须使用S ...

  3. C#中的代码书写规范以及命名规范

    C#代码书写规则: 1. 尽量使用接口,然后使用类实现接口,以提高程序的灵活性. 2.一行不要超过80个字符 3.尽量不要手动更改计算机生成的代码 4.关键的语句写注释 5.建议局部变量在最接近使用它 ...

  4. C++代码书写规范——给新手程序员的一些建议

    代码就是程序员的面子,无论是在工作中在电脑上写程序代码还是在面试时在纸上写演示代码我们都希望写出整洁,优雅的代码.特别在工作中当我们碰到需要维护别人的代码,或者是多人参与一个项目大家一起写代码的时候, ...

  5. 【转】JavaScript常用代码书写规范

    javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 1 2 3 var ...

  6. JavaScript常用代码书写规范

    javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 , y = ; c ...

  7. .Net 项目代码风格规范

    最近没啥时间自己状态也不是很好,公司的事情忙,自己也有一些事情要处理,所以好久没有写博客了.利用公司午休时间写一写,以下是参考了一些资料,整理出来,共勉之. 代码风格没有正确与否,重要的是整齐划一,清 ...

  8. Python代码书写规范

    Python 编码规范 一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在 ...

  9. c: c代码书写规范

    排版: 较长的语句或函数过程参数(>80字符)要分成多行书写, 长表达式要在低优先级操作符处划分新行,操作符放在新行之首, 划分出的新行要进行适当的缩进,使排版整齐,语句可读 参考: 1. 运算 ...

随机推荐

  1. ART-TEMPLATE的核心语法

    模板引擎语法 核心方法 // 基于模板名渲染模板 template(filename, data); // 将模板源代码编译成函数 template.compile(source, options); ...

  2. 深入源码,深度解析Java 线程池的实现原理

    java 系统的运行归根到底是程序的运行,程序的运行归根到底是代码的执行,代码的执行归根到底是虚拟机的执行,虚拟机的执行其实就是操作系统的线程在执行,并且会占用一定的系统资源,如CPU.内存.磁盘.网 ...

  3. [c++] 常犯错误

    更改变量值时想清楚对后面程序的影响 scnaf & == 数组下标从0开始 不赋初值导致的垃圾数据 全局flag和局部flag

  4. [Linux] Linux命令行与Shell脚本编程大全 Part.3

    Shell Shell 是管理命令行的程序(包在内核外的壳) 不同Shell版本演化关系如下,一般Linux中会自动安装Sh和Bash(Bash比Sh好写,Zsh最好用) .bashrc:Bash 的 ...

  5. 【转载】Pycharm调试高效,还是pdb调试高效? (在服务端)

    https://segmentfault.com/q/1010000005067119 Pycharm调试高效,还是pdb调试高效? (在服务端)  python  3.9k 次浏览 问题对人有帮助, ...

  6. otter源码解读(一)

    概览 lib存放的是项目依赖包,由于项目用到的包比较杂,可能有的包已经不在maven仓库中提供了,所以提供了一个lib包,执行里面的install命令,就可以把包安装到本地maven仓库. manag ...

  7. stm32.cube(一)——系统架构及目录结构

    一.前言 Arm的应用场景往往比51单片机复杂得多,如果一个高级应用的开发需要连底层的结构性代码都要重构,那么在成本和研发周期上就会面临巨大的风险.为了简化编码过程,芯片厂商经常会提供一些板卡级支持的 ...

  8. 存储单位 KB MB bit

  9. Java反射机制详情

    1.运行环境 JDK8+lntellij IDEA 2018.3 2.反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个 ...

  10. 开源月刊《HelloGitHub》第 62 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...