以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. [bug] vscode output 输出乱码

    参考 https://blog.csdn.net/qq_34192032/article/details/105077173 https://blog.csdn.net/a19990412/artic ...

  2. 关于flume中涉及到时间戳的错误解决,Expected timestamp in the Flume even

    在搭建flume集群收集日志写入hdfs时发生了下面的错误: java.lang.NullPointerException: Expected timestamp in the Flume event ...

  3. 编译安装rsyslog

    安装gcc-c++ 615 yum -y install gcc c++ 616 yum -y install gcc-c++ 安装libestr.libee wget http://libestr. ...

  4. 2019年又迎来Hi1620,鲲鹏920则是Hi1620系列的正式品牌和型号

    据记者了解,2013年华为就发布了Hi1610,2014年的Hi1612是ARM64位CPU,2016年的Hi1616是首颗支持多路的ARM处理器,2019年又迎来Hi1620,鲲鹏920则是Hi16 ...

  5. hugboy源库

    =[个人整理的一些源库,均来自网络]= -[Ubuntu]- #阿里源 Ubuntu 20.04 deb http://mirrors.aliyun.com/ubuntu/ focal main re ...

  6. HTTP、TCP、UDP,Socket,HTTPS

    TCP   HTTP   UDP三者的关系如下: TCP/IP是个协议组,可分为四个层次:网络接口层.网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协 ...

  7. centos更新git

    安装完centos 7后默认的git版本为1.8,有些软件需要更新版本的git,但是在yum库中并没有更高的git版本,所以需要下载安装包进行手动安装,git下载地址:https://git-scm. ...

  8. python @staticmethod @classmethod self cls方法区别

    一直在用这些东西,但是又从来没有总结过,正好今日想起来就总结一下这些东西 @staticmethod 静态方法,名义上归属类管理,不能使用类变量和实例变量,类的工具包放在函数前,不能访问类属性和实例属 ...

  9. 在 Android 使用 QuickJS JavaScript 引擎教程

    quickjs-android 是 QuickJS JavaScript 引擎的 Android 接口框架,整体基于面向对象设计,提供了自动GC功能,使用简单.armeabi-v7a 的大小仅 350 ...

  10. CefSharp如何进行页面的缩放(即Ctrl+滚轮)

    问题:CefSharp如何进行页面的缩放 摘要:由于CefSharp并没有提供鼠标滚轮事件.只有一个KeyboardHandler事件,因此只能接收到键盘事件. 环境:CefShap.Wpf 了解Ce ...