好久没水文章了。所以在这个考试过去了一半了的时间里发点东西,算是起个头,之后又要肝起来咯。
本套编码规范只代表个人习惯,符合习惯的规范就是好规范。有观点欢迎讨论,但谢绝人身攻击哦。
命名
- 不使用匈牙利命名法,不在变量前添加
m_
等前缀。 - 使用大驼峰命名属性、方法、事件、枚举、类型和命名空间。
public class MyClass
{
public event Action SomeEvent;
public int Name { get; set; }
[MenuItem("Window/SomeMenu")]
public void DoSomething()
{
}
}
- 使用大驼峰命名静态变量,常量,和公开字段(包括公开只读字段)。
- 使用小驼峰命名私有字段,临时变量,参数,不应/不能被其他对象访问的私有字段应添加一个下划线前缀。
- 布尔变量由小写介词短语开头,表示逻辑类型。
public static string AssetPath = "Asset/";
public const double Pi = 3.1415926;
public readonly int PhoneNumber = 123456;
public string Name = "Hanpi";
private int _health;
public bool isOnline;
private bool canPlayGame;
- 接口名以大写I作为前缀。
public interface IManager
{
}
- 类名应该是名词或者名词性短语。
- 方法名应该是动宾/介宾短语。
- 局部变量的名称要有意义,慎用简写/缩写。
public class GameManager
{
public string GetName()
{
var tempVar = MakeName();
return tempVar;
}
}
结构
类型成员的排列顺序自上而下依次为:
- 静态:静态字段,静态属性,静态方法;
- 字段:私有字段,受保护字段(尽量不要使用公开字段);
- 属性:私有属性,受保护属性,公开属性;
- 事件:私有事件,受保护事件,公开事件;
- 嵌套枚举,嵌套类;
- 构造函数(如果有),按参数数量升序排列;
- 重载方法(如果有),按需排列;
- 方法,按需排列;
- Unity 保留方法(如
Update()
),按调用时间前后排序;
注1:如有需要,应该使用partial
将一部分放在ClassName.PartialType.cs
文件中。比如玩家的不同状态机类。
注2:如果文件行数较多,则应该使用#region
分开代码块并折叠。
格式
缩进
- 不使用 Tab 字符,使用四个空格字符控制一个缩进。
括号
- 左大括号总是在开始块的语句下一行的行首,块内容应再缩进四个空格。
if (condition)
{
DoSth();
}
- Switch-Case 语句的缩进方法:
switch (s)
{
case 0:
{
DoSth();
}
break;
default: break;
}
- 单行语句中,可以有在同一行开始或结束的括号。
public class Foo
{
int bar;
public int Bar
{
get { return bar; }
set { bar = value; }
}
}
空格
- 函数参数之间逗号后使用单个空格。
Right: Console.In.Read(myChar, 0, 1);
Wrong: Console.In.Read(myChar,0,1);
- 圆括号和参数后面不能使用空格。
Right: CreateFoo(myChar, 0, 1)
Wrong: CreateFoo( myChar, 0, 1 )
- 函数名称和括号之间不能使用空格。
Right: CreateFoo()
Wrong: CreateFoo ()
- 不要在括号内使用空格。
Right: x = dataArray[index];
Wrong: x = dataArray[ index ];
- 在流程控制语句之前使用单个空格。
- 在算术运算符前后添加一个空格。
Right: while (x == y)
Wrong: while(x==y)
注释
- 版权声明(若选择)
版权声明卸载文件头,不应该使用三斜杠注释,应该使用双斜杠注释。
//-----------------------------------------------------------------------
// <copyright file="ContainerControl.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
- 方法注释
方法注释应该使用三斜杠XML文档注释。对于开发者互相的评论,应该使用<devdoc>
标签。
<summary>
标签格式应该为:xxx of/which/about/... something
。
public class Foo
{
/// <summary>Public stuff about the method</summary>
/// <param name=”bar”>What a neat parameter!</param>
/// <devdoc>Cool internal stuff!</devdoc>
///
public void MyMethod(int bar) { … }
}
- 代码注释
使用双斜杠注释。注释应放在代码的上方。
// I'm a comment.
var rb = GetComponent<RigidBody2D>();
命名空间
命名空间应根据路径分配,脚本文件的命名空间在using
语句下方空出一行处。
using System;
namespace ProjectName.Core
{
public class MyClass() { }
}