C#命名类型前缀习惯改进

article/2025/7/29 19:29:39

我这几天有一个疑惑,我之前用过一些变量命名,有些混乱,如string sql,string strSql,string sqlStr, string strName,string nameStr,bool boValid,stringbuilder sbFileNames, gridcontrolPerson,textbox txtFilter。我之所以加是想着在编码的时候知道他是什么类型的,但是我有时候前缀写在前面,有时候写在后面,很混乱,我已我查了资料,想规范自己的写法。以下是得到的结论。

对于常见的自定义变量命名
1. 前缀与后缀的使用
在这里插入图片描述

2. 官方命名准则
微软的C#编码规范明确指出:
1公共成员、类型和命名空间使用PascalCase命名规则
2私有成员和参数使用camelCase命名规则
3微软框架设计指南反对这种命名方式
‌4明确禁止使用匈牙利命名法‌

因此
1变量名应具有描述性,‌避免包含类型信息
2在C#或Java等这种强类型语言中,变量类型已经明确声明,前缀冗余
3在变量类型已明确的情况下(string),这种后缀没有必要
4可能引起混淆(是表示"字符串"还是某种缩写?)

推荐写法

string name; // 最简洁清晰的写法
string fullName; // 需要更多描述时
string customerName; // 上下文需要明确时

同理Stringbuilder sb,或Stringbuilder sbFiles也是匈牙利写法,我一看它就能知道它是拼接字符串的,应该如何改善呢。

推荐写法

StringBuilder names = new StringBuilder();  // 标准写法
StringBuilder nameBuilder = new StringBuilder();  // 需要强调用途时// 个人决定以后这么写

为何微软反对匈牙利写法?
匈牙利命名法(Hungarian Notation)是一种编程命名规范,其基本原则是:‌变量名=属性+类型+对象描述‌,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。
由微软程序员查尔斯·西蒙尼(Charles Simonyi)在20世纪80年代提出,他是一位匈牙利裔程序员,因此得名。
核心思想‌:通过变量名前缀直观反映变量的类型或用途
最初在微软内部流行,后通过微软产品和文档向世界传播。
如C/C++中

int iMyAge;       // "i"表示int类型
char cMyName[10]; // "c"表示char类型
float fManHeight; // "f"表示float类型

但现在的强类型语言,都转为语义命名,如
‌Apache项目‌:采用清晰的语义命名,如userName、itemList等,避免类型前缀
‌现代趋势‌:大型开源项目普遍转向语义化命名,仅保留少量特殊前缀(如m_表示成员变量,g_标识全局变量)
匈牙利命名法作为特定历史时期的产物,其核心价值已被现代开发工具和实践所替代,但其强调代码可读性的理念仍然值得借鉴。开发者应根据项目特点和团队规范,选择最适合的命名策略。

关于UI控件命名呢,我需要一眼看出我这个变量是列,还是文本框,总不能也省略吧。资料总结如下
微软官方对于UI控件命名并没有强制规定必须使用前缀,但在实际开发中,特别是在WinForms和WPF项目中,开发者社区形成了一些约定俗成的做法。对于UI控件,特别是复杂UI中的同类控件,微软文档中暗示了使用前缀有助于区分控件类型。WPF控件命名指南建议使用有意义的名称,但没有明确禁止前缀。
而当同一窗体有多个同类控件时,前缀更有优势。

‌所以建议前缀使用情况‌
gc前缀表示GridControl(如gcEmployees)
gv前缀表示GridView(如gvOrders)
col或gc前缀表示GridColumn(如colName或gcName)
txt前缀标识Text(如txtFilter或txt_filter)
‌示例‌:

// DevExpress GridControl常见命名方式
GridControl gcMainData = new GridControl();
GridView gvDetailView = new GridView(gcMainData);
GridColumn colID = new GridColumn("ID");// 推荐命名方式示例
GridControl gcCustomer = new GridControl();  // 使用前缀
GridView gvCustomerDetails = new GridView(gcCustomer);
GridColumn colCustomerName = new GridColumn("Name");// 或者语义化命名(也可参考)
GridControl customerGrid = new GridControl();
GridView detailsView = new GridView(customerGrid);
GridColumn nameColumn = new GridColumn("Name");// 个人极不推荐
GridControl gc = new GridControl();
GridControl grid = new GridControl();
GridControl customer= new GridControl();

http://www.hkcw.cn/article/jUeqSBossw.shtml

相关文章

生成式AI如何重塑设计思维与品牌创新?从工具到认知革命的跃迁

当MidJourney生成的视觉方案出现在国际设计奖项的决赛名单,当Adobe Firefly成为设计师的标配工具,一个问题正从行业边缘走向中心:生成式人工智能(GAI)究竟在解构还是重构创意领域?作为深度参与AI与设计融合…

零知开源——STM32F407VET6驱动Flappy Bird游戏教程

简介 本教程使用STM32F407VET6零知增强板驱动3.5寸TFT触摸屏实现经典Flappy Bird游戏。通过触摸屏控制小鸟跳跃,躲避障碍物柱体,挑战最高分。项目涉及STM32底层驱动、图形库移植、触摸控制和游戏逻辑设计。 目录 简介 一、硬件准备 二、软件架构 三、…

超高频RFID读写器天线分类及应用场景

超高频RFID(Radio Frequency Identification,射频识别)技术作为一种先进的自动识别技术,已经在多个领域得到了广泛应用。作为RFID系统的重要组成部分,超高频RFID读写器天线不仅影响着系统的读取距离、读取速度和准确性,还决定了RFID系统的适应性和灵活性。本文将详细介绍…

第J2周:ResNet50V2算法实战与解析

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 batch_size32:每次训练取32张图像组成一个 batch img_size(224, 224):图像输入大小匹配 ResNet50 的输入要求 epochs10:训练…

界面控件DevExpress WinForms中文教程:Banded Grid View - 如何固定Bands?

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

安全帽检测

通过百度网盘分享的文件:工地项目 链接:https://pan.baidu.com/s/1pVxriAKKodwrcf_4Ou-OZg?pwdn2rv 提取码:n2rv --来自百度网盘超级会员V2的分享 YOLOv5训练自定义模型 YOLOv5需要安装pytorch、cuda、cudnn,可以参考我的环…

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册

晨控CK-UR08与欧姆龙PLC配置Ethernet/IP通讯连接操作手册 晨控CK-UR08系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题:围绕…

windows无法安装到这个磁盘,选中的磁盘采用gpt分区仪式

解决办法: 我才用的是一个网友分享的微软官方解决办法,成功了,但是不知道会不会i有什么影响。将所有分区删掉,这时磁盘变成为分配的空间。我个人是两块固态,一块m.2,一块sata;所以我直接将500g…

JVM内存模型

JVM内存模型 说明: 1、JVM由装载子系统、运行时数据区(jvm内存模型)、字节码执行引擎; 2、运行时数据区包含堆、元空间、栈、本地方法栈和程序计数器; 3、堆、元空间是线程共享;方法栈、程序计数器是线程…

【Python】第一弹:对 Python 的认知

目录 一、Python 的背景 1.1. Python 的由来 1.2 Python 的作用 1.3 Python 的优缺点 1.4 Python 的开发工具 一、Python 的背景 1.1. Python 的由来 Python 由荷兰数学和计算机科学研究学会的吉多・范罗苏姆 (Guido van Rossum)在 20 世纪 80 年代…

动态规划基础

动态规划是一种算法思想,关键是理解思想和什么时候用。 算法思想 动态规划用于解决多阶段决策最优化问题,这类问题类似递推。 1.阶段 将问题分为多个阶段,每个阶段之间有联系,即可递推。一般可按问题求解次序或问题的递归性质划…

WEB3——什么是ABI

怎么获得ABI? 在编译完合约后,可以在左边下面点击复制ABI ABI(Application Binary Interface,应用二进制接口)是用来让前端或服务端 JavaScript 代码与智能合约进行交互的桥梁,它描述了合约的函数、事件和…

本地部署Ollama DeepSeek-R1:8B,接入Cherry Studio

本地部署Ollama DeepSeek-R1:8B,接入Cherry Studio 本教程为本地部署ollama 环境,运行deepseek-r1:8B 模型,并完成cherry studio接入调用。 实现无网环境也可提问模型 一、ollama 环境安装 通过网盘分享的文件:OllamaSetup.ex…

彻底解决Win11文件资源管理器预览窗格无法预览问题

国内某几个流氓软件(W*S、*狗PDF...),耗子尾之!!! (转载)Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全 https://zhuanlan.zhihu.com/p/4542…

竞争加剧,美团的战略升维:反内卷、科技与全球化

5月26日,美团发布2025年第一季度业绩报告,交出了一份兼具韧性与创新性的成绩单。 报告显示,公司一季度总营收866亿元,同比增长18%;核心本地商业收入643亿元,同比增长18%;季度研发投入58亿元&a…

【unity游戏开发——编辑器扩展】AssetPostprocessor和AssetImporter对导入的资源进行统一的预处理

注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、AssetPostprocessor1、主要特点2、常用回调方法3、…

代码随想录算法训练营 Day61 图论ⅩⅠ Floyd A※ 最短路径算法

图论 题目 97. 小明逛公园 本题是经典的多源最短路问题。 在这之前我们讲解过,dijkstra朴素版、dijkstra堆优化、Bellman算法、Bellman队列优化(SPFA) 都是单源最短路,即只能有一个起点。 而本题是多源最短路,即求多…

CATIA高效工作指南——测量分析篇(一)

一、精准重心分析与实时更新技术 1.1 材料属性与几何体重心关联 在复杂零件设计中,重心控制直接影响产品性能。通过CATIA的材料属性系统可实现动态重心跟踪: ​​密度赋值​​:应用材料 → 选择单个几何体 /依次选择多个几何体→ 指定材质…

【PCB工艺】PCB设计中的基本概念

此文结合实例讲解PCB的设计流程和一些基本概念。 🧱 PCB 是什么? PCB(Printed Circuit Board)(即印制线路板) 是电子元器件的载体,是没有焊接任何器件的“裸板”。 PCB只是板子,没有焊接元件,而PCBA可以理解为焊接好元件的完成板子。 简单点说,PCB 只包含:铜线、电源…

深度学习|pytorch基本运算

【1】引言 pytorch是深度学习常用的包,顾名思义,就是python适用的torch包,在python里面使用时直接import torch就可以调用。 需要注意的是,pytorch包与电脑配置、python版本有很大关系,一定要仔细阅读安装要求、找到…