{"id":15035820,"url":"https://github.com/hiram3512/csharpnamingguidelines","last_synced_at":"2025-09-01T17:42:08.205Z","repository":{"id":88281111,"uuid":"140684484","full_name":"hiram3512/CSharpNamingGuidelines","owner":"hiram3512","description":"C#命名规范中文版/C#编码规范中文版","archived":false,"fork":false,"pushed_at":"2019-03-04T02:58:21.000Z","size":17,"stargazers_count":49,"open_issues_count":0,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-09T23:15:06.303Z","etag":null,"topics":["china","chinese","chinese-translation","csharp","csharp-code","csharp-script","guidelines","naming-convention","naming-conventions","naming-schemes"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hiram3512.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-12T08:28:10.000Z","updated_at":"2025-03-28T03:07:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"41cc3033-a004-4ff9-a8ea-b96c7e48a4c0","html_url":"https://github.com/hiram3512/CSharpNamingGuidelines","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiram3512%2FCSharpNamingGuidelines","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiram3512%2FCSharpNamingGuidelines/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiram3512%2FCSharpNamingGuidelines/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hiram3512%2FCSharpNamingGuidelines/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hiram3512","download_url":"https://codeload.github.com/hiram3512/CSharpNamingGuidelines/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248125591,"owners_count":21051770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["china","chinese","chinese-translation","csharp","csharp-code","csharp-script","guidelines","naming-convention","naming-conventions","naming-schemes"],"created_at":"2024-09-24T20:29:34.289Z","updated_at":"2025-04-09T23:15:13.568Z","avatar_url":"https://github.com/hiram3512.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# C#命名规范中文版/C#编码规范中文版\n\n\n### 示例\n\n```csharp\n/*******************************************************************\n * Description:This is a example class\n * Version: 1.0.0\n * Date: 20180218\n * Author: Hiram  \n * Email: hiramtan@live.com    \n * Copyright @ www.wikipedia.org\n *******************************************************************/\n\nusing System;\n\n/// \u003csummary\u003e\n/// 命名空间(Pascal)\n/// \u003c/summary\u003e\nnamespace Namespace\n{\n    /// \u003csummary\u003e\n    /// 类(Pascal)\n    /// \u003c/summary\u003e\n    public class Class\n    {\n        /// \u003csummary\u003e\n        /// 属性(Pascal)\n        /// \u003c/summary\u003e\n        public int Property { get; set; }\n\n        /// \u003csummary\u003e\n        /// 委托(Pascal):EventHandler后缀\n        /// \u003c/summary\u003e\n        public delegate void EvnetHandler();\n\n        /// \u003csummary\u003e\n        /// 事件(Pascal):On前缀\n        /// \u003c/summary\u003e\n        public event EvnetHandler OnEvent;\n\n        /// \u003csummary\u003e\n        /// 公有字段(Pascal)\n        /// \u003c/summary\u003e\n        public readonly int Field1;\n\n        /// \u003csummary\u003e\n        /// 受保护字段(Pascal)\n        /// \u003c/summary\u003e\n        protected int Field2;\n\n        /// \u003csummary\u003e\n        /// 私有字段(_Camel)\n        /// \u003c/summary\u003e\n        private int _field3;\n        \n        /// \u003csummary\u003e\n        /// 方法(Pascal)\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"args\"\u003e参数(Camel)\u003c/param\u003e\n        public void Method(int args)\n        {\n            //局部变量(Camel)\n            int variable = 10;\n        }\n    }\n\n    /// \u003csummary\u003e\n    /// 接口(Pascal)\n    /// \u003c/summary\u003e\n    public interface IInterface\n    {\n        /// \u003csummary\u003e\n        /// 属性接口(Pascal)\n        /// \u003c/summary\u003e\n        int Property { get; set; }\n\n        /// \u003csummary\u003e\n        /// 方法接口(Pascal)\n        /// \u003c/summary\u003e\n        /// \u003cparam name=\"args\"\u003e\u003c/param\u003e\n        void Method(int args);\n    }\n\n    /// \u003csummary\u003e\n    /// 枚举(Pascal)\n    /// \u003c/summary\u003e\n    enum Enum\n    {\n        Enum1,//枚举值(Pascal)\n        Enum2,//枚举值(Pascal)\n    }\n}\n```\n-----\n### 参考资料\n\n- 微软官方老版本:[https://msdn.microsoft.com/en-us/library/ms229043(v=vs.100).aspx](https://msdn.microsoft.com/en-us/library/ms229043(v=vs.100).aspx)\n- 微软官方新版本:[https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/capitalization-conventions](https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/capitalization-conventions)\n- ReSharper:[https://www.jetbrains.com/help/resharper/Coding_Assistance__Naming_Style.html](https://www.jetbrains.com/help/resharper/Coding_Assistance__Naming_Style.html)\n- dofactory:[http://www.dofactory.com/reference/csharp-coding-standards](http://www.dofactory.com/reference/csharp-coding-standards)\n- [https://github.com/ktaranov/naming-convention/blob/master/C%23%20Coding%20Standards%20and%20Naming%20Conventions.md](https://github.com/ktaranov/naming-convention/blob/master/C%23%20Coding%20Standards%20and%20Naming%20Conventions.md)\n- [https://gist.github.com/jburditt/3178227739d3a604663e58fc2e6c15c5](https://gist.github.com/jburditt/3178227739d3a604663e58fc2e6c15c5)\n- [https://www.jianshu.com/p/0d09cc624dae](https://www.jianshu.com/p/0d09cc624dae)\n- [https://github.com/wanfangdata/guide/blob/master/dotnet%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83/%E7%BC%96%E7%A0%81%E8%A7%84%E8%8C%83.md](https://github.com/wanfangdata/guide/blob/master/dotnet%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83/%E7%BC%96%E7%A0%81%E8%A7%84%E8%8C%83.md)\n- [https://gist.github.com/zhuqling/a2700703d088b8746f0c](https://gist.github.com/zhuqling/a2700703d088b8746f0c)\n\n-----\n### 通用规则\n所有的命名都是以下面两种方式进行命名:\n- PascalCasing(匈牙利命名法:每个词的第一个字母大写)\n- camelCasing(骆驼命名法:第一个词的第一个字母小写,之后每个词的第一个字母大写)\n\n\n\n类型|命名方式|示例\n---|:--:|---:\nNamespace|Pascal|`namespace System.Security { ... }`\nType|Pascal|`public class StreamReader { ... }`\nInterface|Pascal|`public interface IEnumerable { ... }`\nMethod|Pascal|`public virtual string ToString();`\nProperty|Pascal|`public int Length { get; }`\nDelegate|Pascal|`public delegate void EvnetHandler();`\nEvent|Pascal|`public event EventHandler Exited;`\nPublic Field|Pascal|`public readonly int Min = 0;`\nProtected Field|Pascal|`protected int Min = 0;`\nprivate Field|Camel|`private int _min = 0;`\nEnum|Pascal|`public enum FileMode`\nParameter|Camel|`public static int ToInt32(string value)`\nLocal Variable|Camel|`void Method(){int number = 10;}`\n\n-----\n### 特殊说明\n\n\u003e注释\n\u003e\u003e**文件注释**: 文件注释以如下方式进行,在扩展注释时(回车换行时)会自动添加注释行. \n\u003e\u003e  ```csharp\n\u003e\u003e /*******************************************************************\n\u003e\u003e * Description:This is a example class\n\u003e\u003e * Version: 1.0.0\n\u003e\u003e * Date: 20180218 \n\u003e\u003e * Author: Hiram  \n\u003e\u003e * Email: hiramtan@live.com    \n\u003e\u003e * Copyright @ www.wikipedia.org\n\u003e\u003e *******************************************************************/\n\u003e\u003e  ```\n\u003e\u003e**命名空间 类型 接口 方法名 属性 事件 字段 枚举**:以\"///\"的方式注释,编辑器会自动完善注释,并且可以用生成工具直接生成代码注释文档.\n\u003e\u003e  ```csharp\n\u003e\u003e        /// \u003csummary\u003e\n\u003e\u003e        /// 方法(Pascal)\n\u003e\u003e        /// \u003c/summary\u003e\n\u003e\u003e        /// \u003cparam name=\"args\"\u003e参数(Camel)\u003c/param\u003e\n\u003e\u003e        public void Method(int args)\n\u003e\u003e        {\n\u003e\u003e            //局部变量(Camel)\n\u003e\u003e            int variable = 10;\n\u003e\u003e        }\n\u003e\u003e  ```\n\u003e\u003e**其他注释**:以\"//\"的方式注释在上一行或行尾添加注释(比如局部变量,逻辑行)\n\u003e\u003e**段落注释**:以如下方式进行\n\u003e\u003e```csharp\n\u003e\u003e/*\n\u003e\u003e        public void Method()\n\u003e\u003e        {\n\u003e\u003e\n\u003e\u003e        }\n\u003e\u003e*/\n\u003e\u003e```\n\u003e\u003e**待办及高亮**:在注释中添加\"ToDo\"高亮显示注释\n\n\u003e命名空间\n\n\u003e类型\n\u003e\u003e- 结构体命名方式与类一致\n\u003e\u003e- 泛型默认T\n\u003e\u003e- 多个泛型根据反编译微软dll,建议命名T1,T2,T3,T4...\n\n\u003e接口\n\u003e\u003e接口定义以\"I\"开头,比如`IInterface`,`IPlayer`\n\n\u003e方法\n\n\u003e属性\n\u003e\u003e属性都以Pascal方式命名\n\n\u003e委托\n\u003e\u003e微软官方建议添加以下两种后缀\n\u003e\u003e- EventHandler\n\u003e\u003e- Callback\n\u003e\u003e微软官方不建议添加以下后缀\n\u003e\u003e- ~~Delegate~~\n\n\u003e事件\n\u003e\u003e- 微软官方建议:事件参数添加后缀\"EventArgs\"\n\u003e\u003e- 习惯命名:事件以On为前缀(比如OnClick)\n\n\u003e字段\n\u003e\u003e微软团队初期使用Camel方式命名私有字段,后来逐步采用下划线+Camel方式命名,这样做的好处是不必再识别字段是否是局部变量.\n\n\u003e\u003e字段建议是非Public类型的,以属性替换公有的字段:这样外部访问更安全(readonly,const等除外),并且外部调用者全部使用Pascal命名方式调用对象逻辑.\n\n\u003e\u003e微软官方只规定了public/protected以Pascal方式命名,对internal,private类型的字段没有说明,因此各种第三方规范和插件中对私有字段规范也不一致.\n\n\u003e\u003e针对官方的示例代码,书写习惯,智能提示,代码补全和约定俗成的C#规范,建议private采用下划线+Camel方式命名,非Private字段采用Pascal方式命名.\n\n\u003e\u003e参考微软官方命名规则,C#高级编程,Resharp命名规范,.Net源码命名规则,建议字段命名方式如下:\n\n\u003e\u003e- public/protected/internal以Pascal方式命名\n\u003e\u003e- private以下划线+Camel方式命名\n\u003e\u003e```csharp\n\u003e\u003e        public readonly int Field1;\n\u003e\u003e        public const int Field2 = 0;\n\u003e\u003e\n\u003e\u003e        internal readonly int Field3;\n\u003e\u003e        internal const int Field4 = 0;\n\u003e\u003e\n\u003e\u003e        private int _field5;\n\u003e\u003e        private static int _field6;\n\u003e\u003e        private readonly int _field7;\n\u003e\u003e        private const int _field8 = 0;\n\u003e\u003e```\n\u003e\u003e- ~~以m_为前缀的方式不建议(C++命名方式)~~\n\u003e\u003e- ~~以类型为前缀的方式不建议(比如bool类型的字段以b为前缀,枚举以e为前缀)~~\n\u003e\u003e- ~~以类型为后缀的方式不建议(比如单位列表unitList,直接取名为units)~~\n\n\u003e枚举\n\n\u003e参数\n\n\u003e局部变量\n\u003e\u003e局部变量可以使用var自动声明类型\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhiram3512%2Fcsharpnamingguidelines","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhiram3512%2Fcsharpnamingguidelines","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhiram3512%2Fcsharpnamingguidelines/lists"}