C# or Unity 约定俗成的命名

 

私有变量用“_"  int _index=10;

临时变量采用首字母小写:

void Hide()

{

int index=0;

  using UnityEngine;

   using UnityEngine.UI;
   using System.Collections;
   using System.Collections.Generic;

/// <summary>
/// 展示编码风格
/// </summary>
public class ProgrammingStyle : MonoBehaviour
{
    #region Basic App
    /// <summary>
    /// 私有成员变量不做限制
    /// </summary>
    [SerializeField] Button mBtnEnterMainPage;


    /// <summary>
    /// public类型使用首字母大写驼峰式
    /// </summary>
    public int LastIndex = 0;


    /// <summary>
    /// public 类型属性也算public类型变量
    /// </summary>
    public int CurSelectIndex
    {
        get { return mCurSelectIndex; }
    }


    void Start()
    {
        mBtnEnterMainPage = transform.Find("BtnEnterMainPage").GetComponent<Button>();


        // GameObject命名
        // 临时变量命名采用首字母小写驼峰式
        GameObject firstPosGo = transform.Find("FirstPosGo").gameObject;
    }


    /// <summary>
    /// 方法名一律首字母大写驼峰式
    /// </summary>
    public void Hide()
    {
        gameObject.SetActive(false);
    }
    #endregion


    #region Advanced
    /*
     * GameObject->Go
     * Transform->Trans
     * Button->Btn
     * 
     * For->4
     * To->2
     * Dictionary->Dict
     * Number->Num
     * Current->Cur
     */


    /// <summary>
    /// 1.Bg肯定是图片
    /// </summary>
    [SerializeField] Image mBg;


    /// <summary>
    /// GameObject->Go
    /// </summary>
    [SerializeField] GameObject mDialogGo;


    /// <summary>
    /// Transfom->Trans
    /// </summary>
    [SerializeField] Transform mScrollViewTrans;


    /// <summary>
    /// Index、Num、Count等肯定是int
    /// </summary>
    [SerializeField] int mCurSelectIndex;


    /// <summary>
    /// RectTransform->RectTrans;
    /// </summary>
    [SerializeField] RectTransform mScrollContentRectTrans;


    /// <summary>
    /// 1.Pos肯定是Vector3、Vector2
    /// 2.Size肯定是Vector2
    /// </summary>
    [SerializeField] Vector3 mCachedPos;
    [SerializeField] Vector2 mCachedSize;


    /// <summary>
    /// 后缀s表示是个数组
    /// </summary>
    [SerializeField] Vector3[] mCachedPositions;


    /// <summary>
    /// 1.List后缀
    /// 2.4->for 表示所属关系可以表示Dict
    /// 3.Dict后置
    /// </summary>
    [SerializeField] List<Vector3> mCachedPosList;
    [SerializeField] Dictionary<string, Vector3> mPos4ChildName;
    [SerializeField] Dictionary<string, Vector3> mChildPosDict;
    #endregion
}

规范目的:

(1.1)增强代码可维护性。代码的编写不是一次性就能写得很完美的,需要不断的修复bug,修改或增加功能,重新设计整体架构等。这时就需要进入代码中去做修改,如果没有良好的代码规范,时间久了自己阅读起来就很费力。 
(1.2)提高团队开发效率。大多数项目的代码都不是由一个人编写的,其他成员也许会因为项目的交接需要接手管理你所编写的代码,如果没有良好的代码规范,他人便无法快速轻松的理解你的代码。 
(1.3)提高个人编码效率。最开始可能会觉得被规范约束,后来反而会因为有规范而有依靠感,不必再为起什么名字而犹豫。

Camel :又称驼峰式命名法,驼峰式命名的时候将首字母小写,骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。


pascal命名法:帕斯卡命名法是在命名的时候将首字母大写,单字之间不以空格断开或连接号(-)、底线(_)连结,第一个单字首字母采用大写字母;后续单字的首字母亦用大写字母,例如:FirstName、LastName。每一个单字的首字母都采用大写字母的命名格式,被称为“Pascal命名法”,源自于Pascal语言的命名惯例,也有人称之为“大驼峰式命名法”(Upper Camel Case),为驼峰式大小写子集


1.这里还有一个约定俗称的规定,就是订阅事件的方法的命名,通常为“On 事件名”,比如这里的OnNumberChanged。发布者发布某个事件(event)时将调用 订阅事件的方法 OnNumberChanged;

2.若方法返回的值是bool变量,则方法名一般根据含义以Is/Can/Has/Try作为前缀。

3.若方法返回一个成员变量的值,则方法名一般为Get + 成员变量名。若方法修改一个成员变量的值,则方法名一般为Set + 成员变量名。


4.注释规范:

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

// 文件名称:UserInput.cs
// 功能描述:玩家输入按键的定义
// 编写作者:张三
// 编写日期:2017.7.16
// 修改记录:
//      R1:
//          修改作者:李四
//          修改日期:2017.7.17
//          修改理由:使玩家可以自定义输入按键

Using System;

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

    /// <summary>
    /// 设置场景的名字.
    /// </summary>
    /// <returns><c>true</c>, 场景名字设置成功, <c>false</c> 场景名字设置失败.</returns>
    /// <param name="sceneName">场景名字.</param>
    public bool SetSceneName(string sceneName) 
    {
    }

规则4-3】类变量注释,采用 /// 形式自动产生XML标签格式的注释变量含义。

    /// <summary>
    /// 场景的名字
    /// </summary>
    private string mSceneName;

规则4-4】局部变量注释,在变量声明语句的后面注释,与前后行变量声明的注释左对齐,注释与代码间以Tab隔开。

string firstName;   //姓
string lastName;    //名

规则4-5】代码行注释,注释位于代码上行,与代码开始处左对齐,双斜线与注释之间以空格分开。

//设置场景的名字。
this.mSceneName = sceneName;

5.接口的命名要以“I”开头。

public interface IState;
6. 命名空间名、类名、接口名、非私有字段名、枚举名及枚举值名、方法名采用  大驼峰式命名法  ,即每一个单词的首字母都大写。
namespace Car {} //命名空间名
public class SendManager; //类名
public interface IState; //接口名
public string FirstName; //非私有字段名
enum CarDriveType {FrontWheelDrive, RearWheelDrive, FourWheelDrive}//枚举名及枚举值名
public void SendMessage(string message) {} //方法名

7.私有字段名、方法参数名、局部变量名采用 小驼峰式命名法 ,即第一个单词首字母小写,其余单词首字母大写。

private string _firstName; //私有字段名
public void FindByFirstName(string firstName) {} //方法参数名
string firstName; //局部变量名

 以下规则概述字段的命名指南: 

            1privateprotected 使用 Camel 大小写。

            2public 使用 Pascal 大小写。



8.只读常量使用Pascal命名规则,即首字母大写。:  public const double Pi = 3.14159365753; 多个单词 "_" public const string PAGE_TITLE = "Welcome";

9.事件

   a.委托名称采用Pascal规则,即首字符大写。

   b.定义事件的委托要使用EventHandler后缀,且包括sender和e两个参数。

   c.事件用到的参数,名称要带EventArgs后缀。

   eg:

   ClassTest

   {

      private delegate void DoTask();

      private event DoTask DoTaskEventHandler;

      private event DoTask DoTaskEventHandler(Object sender,EventArgse);

      private event DoTaskDoTaskEventHandler2(string   strEventArgs)

      {

      }

   }


10.把相似的内容放在一起,比如字段、属性、方法、事件等,使用“#region--#endregion”命令分组

11.switch语句,case后面必须接break。

12.避免相同的代码段在多个地方出现。(尽量避免代码重复,能复用则复用)

13.缩写可自行定义,一般取单词的前/后字符组成,以含义直观为准则。一般情况下不要让缩写破坏标识符的含义。

14.每个类和方法完成单一的功能,不设计多用途面面俱到的类或方法。

15.严禁使用未经初始化的变量,变量通常使用构造方法来初始。

16.碰到大括号要换行。

17.数据库中每一张表对应一个实体类/数据传输对象(DTO)。

18. 数据传输对象         XxxxDto

      DAO工厂            XxxDAOFactory

      DAO接口            IXxxxDAO

      服务接口           IxxxxService

      DAO的数据库实现     XxxxDAOOracle/XxxxDAOInfomix

      业务逻辑           XxxxManager

19.坚决禁止在普通变量前加“m_”(这是VC老命名规则)。


20.系统输入、资源操作(如内存分配、文件及目录操作)、网络操作(如通信、调用等)、任务间的操作(如通信、调用等)时必须进行错误、超时、或则异常处理。

21.模块的编写应有完善的测试方面的考虑。


22.在使用于超两个字符度的使用 Pascal 大小写或 Camel 大小写。例如,使用 HtmlButton HTMLButton。但是,当大写有两个字符的写,如,System.IO,而不是 System.Io


23.不要在 Enum 型名称上使用 Enum 后 





 缩写:

Button btn, Text txt,Label lbl,Image img


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值