当前位置: 首页 > news >正文

【C#】命名规范

文章目录

  • C# 命名规范
    • 使用Pascal case
    • 使用Camel case
    • 方法、属性、类命名见名知义
    • LINQ查询变量使用有意义的名称
    • 如何声明成员变量和字段
    • 正确格式化和缩进代码
    • 如何撰写备注
  • 通用C#编码最佳实践
    • 如何将值与空字符串进行比较
    • 使用异常处理
    • 使用&&和||可获得更好的性能
    • 单一职责
    • 使用枚举表示离散值
    • 如何将字符串变量与用户输入进行比较
  • 原文

C# 命名规范

使用Pascal case

在命名类、结构、方法、属性或常量字段时,通常首选Pascal大小写

namespace ExampleApp
{class ClassNamingConvention{public const string ConstantFieldNamingConvention = "C#";public string PropertiesNamingConvention { get; set; }public void MethodNamingConvention(){//type something here}}
}

命名接口时,它通常以大写字母I作为前缀。命名接口时也可以使用Pascal大小写。

public interface IInterfaceNamingConvention
{//type something here
}

使用Camel case

驼峰用于命名方法参数、私有字段和局部变量。私有字段通常以_作为前缀。

private string _fieldsNamingConvention;public void MethodNamingConvention(string methodArgsNamingConvention)
{string localVariables = "string here ...";            
}

方法、属性、类命名见名知义

始终为类、方法和属性使用有意义且不言自明的名称。用它们的作用来命名属性、方法和类是一种很好的做法。这样,只需阅读名称,你就可以很容易地知道它的确切作用。

class AppNotification{private string _appStatus;public string AppStatus{get { return _appStatus; }set { _appStatus = value; }}public static void SendNotification(){//type something here . . .}}

LINQ查询变量使用有意义的名称

始终为LINQ查询变量使用有意义且不言自明的名称,如下例所示。

public void QueryRacers()
{var racersInItaly = from racer in racerswhere racer.City == "Lazio"select racer.Name;
}

C# Code Layouts and Comments

如何声明成员变量和字段

始终在类的顶部声明所有成员变量和字段。当在类的顶部声明字段时,很容易看到类正在使用的所有变量,并理解类的整体状态。

在C#中,在类的顶部声明字段也很重要,因为它使代码更有组织性和可读性,特别是在处理大型类或与团队合作时。这使得其他人更容易理解代码并进行更改。

class Car
{private int _carSpeed;public int CarSpeed{get { return _carSpeed; }set { _carSpeed = value; }}public static void GetMaxSpeed(){//...}public static void GetMaxAcceleration(){//...}
}

正确格式化和缩进代码

当涉及到代码布局时,为了可读性和清晰的代码组织,格式化和正确缩进代码非常重要。

每行只写一条语句是很好的做法。例如:

public void Numbers(int number)
{//Good practiceif (number > 0){Console.WriteLine(number);}//Bad practiceif (number < 0){Console.WriteLine(number);}}

如何撰写备注

最好的做法是以大写文本开始注释,并以句点结束。(英文注释)

写评论对整个团队都有帮助。它使代码更具可读性、可维护性和可理解性。将注释放在新行上,而不是放在代码末尾,这是一种很好的做法。例如:

class Car
{public string Name { get; set; }//We place comments here.       //And end with a period.public void Move(){//...}
}

通用C#编码最佳实践

如何将值与空字符串进行比较

在将值与空字符串进行比较时,请尝试String.Empty而不是“”。使用String.Empty可以提高代码的可读性,并明确表示比较是针对空字符串的。这使得将来更容易理解和维护代码。

public void NameCheck(string name)
{if(name == String.Empty){}}

使用异常处理

使用异常处理来优雅地处理错误和异常。这有助于防止代码崩溃,并使其更加健壮。对于大多数异常处理,使用try-catch语句是很好的做法。

  public void NameCheck(string name){try{//type code here}catch (Exception exception) { }{//type code here}}

使用&&和||可获得更好的性能

为了提高应用程序的性能,在执行比较时最好使用&&而不是&,使用||而不是|,如下例所示。

public void Numbers(int number)
{if (number > 2 && number < 4){Console.WriteLine(number);}   
}

这是因为&&和||运算符被称为“短路”运算符。这意味着,如果&&运算的第一个操作数为false,则不会计算第二个操作数,因为整个表达式必须为false。

同样,如果||操作的第一个操作数为真,则不会计算第二个操作数,因为整个表达式必须为真。

这反过来又提高了程序的性能。

单一职责

最好将方法限制为单个功能。不要试图将一个类的多个功能组合到一个方法中。这确保了代码的可读性,并帮助您避免编写“意大利面条式代码”。

class AppNotification
{        public void SendNotification(){//. . .}public void ReceiveNotification(){//. . .}public void MuteNotification(){//. . .}
}

使用枚举表示离散值

使用枚举而不是数字和字符串来表示离散值。枚举提供了一种提高代码质量的方法,使其更具可读性、类型安全性和效率。它们还提供了一种定义一组命名积分常数的方法。

 class Car{public enum LoggerType{NewCars,UsedCars,Database}public void DisplayException(string message, LoggerType loggerType){switch (loggerType){case LoggerType.NewCars:Console.WriteLine(LoggerType.NewCars);break;case LoggerType.UsedCars:Console.WriteLine(LoggerType.UsedCars);break;case LoggerType.Database:Console.WriteLine(LoggerType.Database);break;default:Console.WriteLine(message);break;}}}

如何将字符串变量与用户输入进行比较

在将字符串变量与用户输入进行比较之前,始终将其转换为大写或小写是一种很好的做法。

这确保了比较不区分大小写。这使您的代码更具可读性和可维护性,因为它消除了对案例处理逻辑的需求。

  class Car{public void DisplayTransactions(){string name = Console.ReadLine();if(name.ToLower() == "Joe"){//...}//Or.if (name.ToUpper() == "Joe"){//...}}}

原文

C# Coding Best Practices – Coding Conventions with Examples

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SAP 工厂间的库存转移简介
  • 电脑安装OpenWRT系统
  • 计算机网络第五章--传输层
  • 带你0到1之QT编程:十、一举击破开发中常用的Button按钮组
  • Redis 缓存淘汰算法策略详解
  • python制作石头剪刀布
  • 气压测试实验(用IIC)
  • 【题解】CF1993D
  • 喧嚣漫天之际,重新审视以太坊的定位与路线图
  • 力扣移除元素(力扣题26)(插空找空位java)
  • 在虚拟机安装mysql数据库
  • 测试工程师学历路径:从功能测试到测试开发
  • selenium元素定位:元素点击交互异常解决方法
  • 计算机网络 --- 【1】欢迎来到计算机网络/计算机网络基本概念/计算机网络、互连网、互联网的区别
  • Vue的slot插槽(默认插槽、具名插槽、作用域插槽)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Brief introduction of how to 'Call, Apply and Bind'
  • CentOS从零开始部署Nodejs项目
  • hadoop集群管理系统搭建规划说明
  • JavaScript设计模式之工厂模式
  • java概述
  • js数组之filter
  • js正则,这点儿就够用了
  • log4j2输出到kafka
  • PHP 7 修改了什么呢 -- 2
  • React组件设计模式(一)
  • Wamp集成环境 添加PHP的新版本
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 类orAPI - 收藏集 - 掘金
  • 排序算法之--选择排序
  • 赢得Docker挑战最佳实践
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 如何用纯 CSS 创作一个货车 loader
  • #android不同版本废弃api,新api。
  • #QT(QCharts绘制曲线)
  • #微信小程序:微信小程序常见的配置传旨
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $NOIp2018$劝退记
  • (C++20) consteval立即函数
  • (CPU/GPU)粒子继承贴图颜色发射
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (转)JAVA中的堆栈
  • (转)LINQ之路
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .cfg\.dat\.mak(持续补充)
  • .net core Swagger 过滤部分Api
  • .NET 发展历程
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .Net6 Api Swagger配置
  • .Net中wcf服务生成及调用