当前位置:  开发笔记 > 编程语言 > 正文

常量的C#命名约定?

如何解决《常量的C#命名约定?》经验,为你挑选了9个好方法。

推荐的命名和大写惯例是使用Pascal大小写来表示常量(Microsoft有一个名为StyleCop的工具,它记录了所有首选约定,并且可以检查您的合规性来源 - 虽然它对于许多人的口味有点过于保持).例如

private const int TheAnswer = 42;

Pascal资本化惯例也记录在Microsoft的框架设计指南中.



1> Greg Beech..:

推荐的命名和大写惯例是使用Pascal大小写来表示常量(Microsoft有一个名为StyleCop的工具,它记录了所有首选约定,并且可以检查您的合规性来源 - 虽然它对于许多人的口味有点过于保持).例如

private const int TheAnswer = 42;

Pascal资本化惯例也记录在Microsoft的框架设计指南中.


实际上,StyleCop"不是微软的产品",而是"由微软非常热情的开发人员(晚上和周末)开发的工具." (参见http://blogs.msdn.com/sourceanalysis/archive/2008/07/20/clearing-up-confusion.aspx和http://blogs.msdn.com/bharry/archive/2008/07/19/清理 - confusion.aspx)了解详细信息.)话虽如此,微软的框架命名约定使用Pascal外壳作为常量,因此该工具只是强制执行Microsoft _does_发布和认可的标准.
我会使用TheAnswer表示法,除非值为42,在这种情况下,我肯定会坚持使用ALL_CAPS方法.
@bdukes - 我没有说它是微软的产品,但是它确实在整个组织中有相当多的使用和支持(作为一名前员工,我在微软以外的任何人开始使用它之前几年都使用它,所以我很清楚它的遗产).
我不喜欢这样,因为第一个字母通常用于表示变量是否在外部可见.在代码中,TheAnswer看起来像一个公共财产,而不是我的私人const.我实际上更喜欢使用像constTheAnswer和ConstTheAnswer这样的前缀.
私人领域不应该是骆驼套装,如果它是常量的事件吗?
对于实例字段来说也是如此.为了命名,常量被认为是静态的.https://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

2> bh213..:

实际上,它是

private const int TheAnswer = 42;

至少如果你看看.NET库,哪种IMO是决定命名约定的最佳方式 - 所以你的代码看起来不合适.



3> usefulBee..:

在视觉上,大写是走的路.它是如此可识别的方式.为了独特而没有机会猜测,我投票支持UPPER_CASE!

const int THE_ANSWER = 42;

注意:当在页面顶部的同一文件中使用常量并用于智能感知时,大写将很有用; 但是,如果他们被转移到一个独立的班级,使用大写不会有太大的区别,例如:

public static class Constant
{
    public static readonly int Cons1 = 1;
    public static readonly int coNs2 = 2;
    public static readonly int cOns3 = 3;
    public static readonly int CONS4 = 4;
}

// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
 }


强烈建议不要在C#中使用@usefulBee"SNAKE_CASE"; 这个答案是对的.C#中consts的正确案例是"TitleCase".
@ BrainSlugs83,我觉得这里没有对错; 它归结为偏好以及使代码更清晰的原因.
无论上面提出什么建议,我都更喜欢UPPER_CASE用于常量,因为与其他任何情况相比,它更容易识别.
我也喜欢这个,因为Pascal外壳很容易与属性引用相混淆.
@usefulBee同意.但是,尽管如此,仍然很好地标记了什么是_consensus_编写它的方式.我最近一直在做大量的Ruby代码,我认为SCREAMING_SNAKE_CASE是有道理的:很明显它是特别的,你甚至不需要悬停/转到定义来找出它的含义.你马上就知道了.

4> Treb..:

我仍然使用大写字母表示const值,但这更多是出于习惯而不是出于任何特定原因.

当然,它很容易立即看出某些东西是一个常量.我的问题是:我们真的需要这些信息吗?它能以任何方式帮助我们避免错误吗?如果我为const赋值,编译器会告诉我我做了一些愚蠢的事.

我的结论:跟骆驼套管一起去.也许我也会改变我的风格;-)

编辑:

国际海事组织,那些闻起来像匈牙利人的东西并不是真正有效的论点.问题应该始终是:它有帮助,还是有害?

有些情况下匈牙利人有帮助.现在不是很多,但它们仍然存在.


代码的读取频率远高于编写代码.当然,当您编写代码时,编译器将阻止您分配常量.但是那个两年后必须维护代码的人呢?能够立即识别常数肯定很好.
@Tim:我同意,最终预处理器宏带来的弊大于利.我最喜欢的PP宏:"#DEFINE Private Public";-)
如果你考虑一下,大写habbit可能来自预处理器宏而不是常量(我从来没有使用块上限来表示真正的常量).在这种情况下,将宏与实际代码区分开是有意义的,因为宏实际上可能是表达式而不是常量值,它的扩展可能会导致副作用等等.因此,您需要知道何时使用宏以及何时使用const.我个人很高兴看到预处理器宏的背面,它们有很大的潜力使代码难以阅读.
今天的IDE在编译之前会遇到很多问题.我不认为通过名称识别常量是重要的,否则你不应该为readonly变量添加一些特殊的名称?

5> 小智..:

首先,匈牙利表示法是使用前缀来显示参数的数据类型或预期用途的做法.微软的命名惯例是对匈牙利符号说不.http: //en.wikipedia.org/wiki/Hungarian_notation http://msdn.microsoft.com/en-us/library/ms229045.aspx

不鼓励使用UPPERCASE,如下所述:Pascal Case是可接受的约定和SCREAMING CAPS. http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

Microsoft还在此声明,如果完成匹配现有方案,则可以使用UPPERCASE. http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

这几乎总结了它.


是的,匈牙利表示法不是全部大写.

6> dove..:

把匈牙利人留给匈牙利人.

在这个例子中,我甚至遗漏了权威的文章,然后就去了

private const int Answer = 42;

答案是答案还是答案?

*编辑Pascal严格正确,但我认为这个问题是寻求更多的生命,宇宙和一切的答案.


啊,但既然你已经知道了答案,你就不会知道这个问题.它们是相互排斥的.(打赌你已经知道;-)

7> DavidRR..:

在其文章常量(C#编程指南)中,Microsoft给出了以下示例:

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

因此,对于常量,似乎微软推荐使用camelCasing.但请注意,这些常量是在本地定义的.

可以说,外部可见常数的命名更受关注.实际上,Microsoft 将.NET类库中的公共常量记录为字段.这里有些例子:

Int32.MaxValue

String.Empty (实际上 static readonly)

Math.PI

Math.E

前两个是例子PascalCasing.第三个似乎是遵循微软的资本化公约的两个字母的首字母缩略词(虽然pi不是丙烯酸酯).第四个似乎表明,双字母丙烯酸的规则扩展到单个字母的缩写词或标识符,例如E(代表数学常数e).

此外,在其资本化公约文档中,Microsoft非常直接地声明字段标识符应该通过命名,PascalCasing并为MessageQueue.InfiniteTimeout和UInt32.Min提供以下示例:

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

结论:PascalCasing用于公共常量(记录为conststatic readonly字段).

最后,据我所知,Microsoft不提倡私有标识符的特定命名或大小写约定,如问题中提供的示例所示.



8> John..:

ALL_CAPS取自我相信的C和C++工作方式.本文在这里介绍的风格差异是怎么样.

在诸如Visual Studio之类的新IDE中,很容易识别类型,范围以及它们是否恒定,因此并非绝对必要.

该FxCop的微软了StyleCop软件将帮助给你指导和检查你的代码,以便每个人都以同样的方式.



9> Marc Gravell..:

其实,我倾向于喜欢这里PascalCase - 但出于习惯,我有罪UPPER_CASE的...

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有