以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. 进程Queue和线程Queue区别

    进程Queue from multiprocessing import Queue q=Queue() 线程Queue import queue q=queue.Queue()

  2. Iterable 和 Iterator

    可以被for循环输出的为iterable (可迭代对象) 可以被next()调用并不断返回下一个数据的对象为iterator迭代器(python一切皆对象) 数据流,无法知晓其终点,只能推过next不 ...

  3. 使用gulp搭建项目

    项目源码地址 前期准备工作 首先确保本机安装了 node gulp中文文档 安装 gulp 命令行工具 npm install --global gulp-cli 在项目目录下创建 package.j ...

  4. 在Vim中查看文件编码和文件编码转换

    在Vim中查看文件编码和文件编码转换 风亡小窝 关注  0.2 2016.09.26 22:43* 字数 244 阅读 5663评论 0喜欢 2 在Vim中查看文件编码 :set fileencodi ...

  5. Hibernate使用原生SQL语句进行无关联多表查询

    背景:有两个表:CpCg与CpGg需要进行多表查询 因为CpGg表设计到与另外的表也有联系,因此师兄没有关联此两个表,只是用字段进行逻辑关联,CpGg表的cp字段与CpCg表的id字段逻辑关联

  6. 8.2-3 partprobe、tune2fs

    8.2 partprobe:更新内核的硬盘分区表信息       partprobe命令用于在硬盘分区发生改变时,更新Linux内核中的硬盘分区表数据.有时在使用fdisk.part命令对硬盘进行分区 ...

  7. 9.8-9 nice & renice

    nice:调整程序运行时的优先级        nice命令是一个当程序启动时,修改程序运行优先级的命令. Linux的优先级范围是从-20(最大优先级)到19(最小优先级).优先级越高的程序占用CP ...

  8. 3.2-3 tac、more

    3.2 tac命令 是cat的反向拼写,因此命令的功能为反向显示文件内容.cat命令是从第一行开始读取文本输出的,而tac则是从最后一行开始读取文本并进行反向输出,需要注意的是,2个命令都是以一行文本 ...

  9. 如何彻底禁止 macOS Big Sur 自动更新,去除更新标记和通知

    作者:gc(at)sysin.org,主页:www.sysin.org 请访问原文链接:https://sysin.org/article/Disable-macOS-Update/,查看最新版.原创 ...

  10. node.js学习(5)读写文件(同步异步)

    1 导入文件系统库 # 同步的 读文件 写文件 # 异步 需要用异步处理耗时