关“.NET研究”于代码规范

简介:   今天被培训了C#代码规范,为了统一风格。其中我比较有异议的两点如下:类型实例的私有字段应采用骆驼命名法(camelCasing),不应该有任何前缀,在使用时前边加"this.”; 要用FCL类型而不是C#的基元类型,例如要使用Int32代替int。

  今天被培训了C#代码规范,为了统一风格。其中我比较有异议的两点如下:

  1. 类型实例的私有字段应采用骆驼命名法(camelCasing),不应该有任何前缀,在使用时前边加"this.”;
  2. 要用FCL类型而不是C#的基元类型,例如要使用Int32代替int。

  首先对于第一点,个人比较习惯的做法是前边加下划线,说不上好坏,这两种写法在各种开源框架的源码中都见到过。由于VS默认并不提供像Eclipse那样的对私有字段变色的功能,所以如果只是简单的使用camelCasing的话会很难区分哪些是私有字段,哪些是局部变量,所以才有了加this的要求。那么来做个比较:

public void Test()
{
    _age = DateTime.Now.Year 上海徐汇企业网站设计与制作- _birth.Year;
    if (_birth > new DateTime(2000, 1, 1))
    {
        _name += " new century";
    }
}
public void Test2()
{
    this.age = DateTime.Now.Year - this.birth.Year;
    if (this.birth > new DateTime(2000, 1, 1))
    {
        this.name += " new century";
    }
}

  哪个更能一眼看出其中的私有字段来?似乎并没有明显的区别,相反当局部使用的字段比较多的时候,加下划线反而显得更凌乱一点。

  但是,this不是单为field而设置的,实例的属性,方法,事件都可以使用,一旦我们习惯了使用this:

public void Test()
{
    Prop1++;
    _age = DateTime.Now.Year - _birth.Year;
    Method1();
    if (_birth > new DateTime(2000, 1, 1))
    {
        Prop2 += " abcd";
        _name += " new century";
    }
    Event1 += () => { };
}
public void Test2()
{
    this.Prop1++;
    this上海闵行企业网站制作.age = DateTime.Now.Year - this.birth.Year;
    this.Method1();
    if (this.birth > new DateTime(2000, 1, 1))
    {
        this.Prop2 += " abcd";
        this.name += " new century";
    }
    this.Event1 += () => { };
}

  哪个更能一眼看出其中的私有字段来?这个例子可能偏激了一些,但足以表达我的意思。

  另一方面来说,一旦我敲下了this.,由于VS的智能提示,会出现一大堆的提示项让我脑袋发蒙,但是当我敲一个下划线之后,出现的就只会是所有的私有字段了,干净了许多。

  m_的前缀也是一个不错的选择,而且这两种前缀当我们使用快捷键生成属性的时候,VS都会聪明地把前缀去掉,首字母大写,只显示我们想要的名字。

  好吧如果这一条规则我还能接受的话,第二个规则就实在让我无法理解了。

要用FCL类型而不是C#的基元类型,例如要使用Int32代替int。

  培训人并没有说清楚为什么要这么做,从《CLR via C#》这本书中看出,作者也是强烈建议使用FCL类型,他的理由大致是:有些人对int表示什么有困惑,认为在32位机器上就代表Int32,在64位机器上就代表Int64,如果我们直接使用Int32就不会有这样的困扰;long在很多语言中不是64位的,这让习惯于这些语言的人看C#会有误解;等等。

  这些理由我都承认,但我认为不足以说服我使用FCL类型,我的理由如下:

  1. 我认识的同上海闵行企业网站设计与制作事,95%都使用C#的基元类型来敲代码,如果一个规则要让绝大多数人都更改自己的习惯,那么它本身就不合理,而且不可能实施得很顺利。
  2. VS的智能提示都擅自主张地使用C#基元类型而不是FCL类型,即使你用FCL类型编写了一个方法,在我们使用时出现在智能提示中的仍然是基元类型。如果我看到一个方法返回long型,我很自然地会使用一个lo上海徐汇企业网站制作ng去接收它,如果前边写一个Int64接收一个返回long的方法不觉得别扭么?如果我是新手我是不是认为这还是个隐式转型呢?
  3. 从习惯上来说,我敲一个int比敲一个Int32快许多,也舒服很多。我敲一个Int64更是痛苦无比,每次都要低头去找6在哪。我按6最多的时候是玩魔兽的时候,但是玩魔兽和敲代码食指的位置不一样啊,我总是按到7啊。
  4. 我个人喜欢蓝色,比那个蓝不蓝绿不绿的好看多了,这个纯粹是吐槽。

  对于统一编码规范我是举双手赞同的,尤其在交接工作比较频繁的时候,看着各种各样新奇的命名法总是让人心里抓狂。程序员都多多少少有一些洁癖吧,看到不符合自己风格的就想去改。我不是做决定的人,但我总是希望一个人在替很多人做决定时还是广泛征求下意见比较好,不要轻易地把自己的习惯强加给别人,除非你有充足的理由说服我。对于一个热爱这项职业的程序员来说,能舒舒服服地敲代码是一种幸福,但是服从上级的安排,为大局着想又是我的义务,要是能舒舒服服地完成义务该多好。

目录
相关文章
|
16天前
|
机器学习/深度学习 算法 数据可视化
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
.Net Micro Framework研究—Digi开发板初探
写的比较基础全面,由于我们北航的研发团队先研究了Digi的开发板,所以直到今天Digi开发板才到我的手上,我的《Micro Framework研究》系列文章以后也会陆续推出
707 0
.Net Micro Framework研究—IO读写
试验平台:Digi MF开发板
439 0
.Net Micro Framework研究—串口操作
试验平台:Digi MF开发板,Digi提供的示例中包含了串口的示例程序
560 0
|
网络协议
.Net Micro Framework研究—TCP/IP通信
关于网络通信方面,Digi提供了两个程序,一个是TCP Server运行在Digi的开发板上,一个是TCP Client程序,运行在PC上,通过网络,上位机很容易控制Digi开发的IO信号
634 0
.Net Micro Framework研究—模拟器改造
由于Digi提供的开发板没有LCD显示屏,所以有关绘图方面的操作,只好在模拟器上进行了。
543 0
|
Windows
.Net Micro Framework研究—中文显示
微软示例程序中,仅支持两种字体(small.tinyfnt和NinaB.tinyfnt),并不支持中文。
582 0
.Net Micro Framework研究—绘图
目前在VS2005的环境里,还不支持.Net Micro Framework界面的所见即所得绘制,界面制作有三种方式,一是窗体直接绘图,二是Panel+形状对象、三是窗体+控件。第一种做法让人觉得又回到了DOS时代,回到了SCREEN 12的16色的世界里。
484 0
.Net Micro Framework研究—Shapes命名空间
在Microsoft.SPOT.Presentation.Shapes命名空间下,包含几个形状对象,主要有Ellipse、Line、Polygon、Rectangle,同样也只有Rectangle实现的最好,其他形状都不支持填充色,虽然每个对象都有Fill属性。
627 0
.Net Micro Framework研究—窗体控件
目前版本的MF对TCP协议栈支持也并不完善(对串口也谈不上完善,毕竟不支持奇偶校验、停止位设置),Digi的以太网口是加入了自己的处理方案,明年二月份微软将要发布的MF V3.0版,就已经完全支持TCP了,到时候MF最理想的应用也许就是通信转换了。
496 0