【问题标题】:Whats the standard naming convention for readonly static logger field?只读静态记录器字段的标准命名约定是什么?
【发布时间】:2015-02-11 18:01:14
【问题描述】:

我在解决方案中定义所有 NLog 实例,如下所示:

private readonly static Logger logger = LogManager.GetCurrentClassLogger();

在所有 NLog 示例中,记录器字段都是骆驼大小写的: http://www.codeproject.com/Articles/10631/Introduction-to-NLog

但是,在 Microsoft 文档中,他们建议使用 Pascal 大小写命名所有只读静态字段: https://msdn.microsoft.com/en-us/library/vstudio/ms229043%28v=vs.100%29.aspx

此外,StyleCop 有一个具有相同 Pascal 约定的规则: http://www.stylecop.com/docs/SA1311.html

那么对于这种情况,最好的约定是什么?

【问题讨论】:

  • 对此没有正确答案。 视情况而定。坚持您和您的团队感到满意的约定即可。
  • 一定有一些标准或建议吧?
  • 听起来你做了研究,结果是it depends on which site you reference。我认为没有人会提供任何额外的非主观帮助
  • 命名约定不是基于其基础的意见吗?

标签: c# naming-conventions nlog


【解决方案1】:

在我看来,命名约定总是有点模糊,而且微软似乎也没有完全遵守它们。

基于 Resharper 的私有字段命名约定(我相信基于 StyleCop):

 -private static readonly Type Name
 -private readonly Type _name

我个人通常使用 Resharper 提供的命名约定,因为它们似乎尽可能地遵循 Microsoft 的命名,并且它为整个代码库提供了一致性(如果你搞砸了,它会告诉你)。

【讨论】:

    【解决方案2】:

    编辑:其他人已经注意到,编码标准有点像宗教。所以我在下面有我的个人偏好(基于我多年来的经验和研究)。

    我个人喜欢 private, static 是小写字母,并以下划线为前缀,如下所示:

    private static readonly Type log
    private readonly Type _log
    

    既然你提到了 StyleCop,如果你刚刚开始,我会坚持使用 StyleCop 的默认设置,看看你是否喜欢它。就个人而言,我在所有项目中都使用.editorconfig,因此开发人员之间不会混淆。下面的配置用于设置上述建议(并禁用 StyleCop 规则)。

    [*.{cs,vb}]
    
    
    # camelCase and PascelCase
    dotnet_naming_style.pascal_case_style.capitalization = pascal_case
    dotnet_naming_style.camel_case_style.capitalization = camel_case
    
    # camelCase with _ prefix
    dotnet_naming_style._camelCase.capitalization = camel_case
    dotnet_naming_style._camelCase.required_prefix = _
    
    # Private Static Fields is camelCase (e.g. log)
    dotnet_naming_symbols.private_static_field_symbol.applicable_kinds = field
    dotnet_naming_symbols.private_static_field_symbol.applicable_accessibilities = private
    dotnet_naming_symbols.private_static_field_symbol.required_modifiers = static
    
    dotnet_naming_rule.private_static_field_naming.symbols = private_static_field_symbol
    dotnet_naming_rule.private_static_field_naming.style = camel_case_style
    dotnet_naming_rule.private_static_field_naming.severity = suggestion
    
    # SA1311: Static readonly fields should begin with upper-case letter
    dotnet_diagnostic.SA1311.severity = none
    
    # Private Fields is _camelCase (backing fields)
    dotnet_naming_symbols.private_field_symbol.applicable_kinds = field
    dotnet_naming_symbols.private_field_symbol.applicable_accessibilities = private
    
    dotnet_naming_rule.private_field_naming.symbols = private_field_symbol
    dotnet_naming_rule.private_field_naming.style = _camelCase
    dotnet_naming_rule.private_field_naming.severity = suggestion
    
    # SA1309: Field names should not begin with underscore
    dotnet_diagnostic.SA1309.severity = none
    

    P.S 我也更喜欢 log 名称而不是 logger,这是 log4net 的标准名称。使用较新的日志库,已更改为 logger。
    我个人更喜欢阅读log.Info(...),但我使用了带有.LogInfo(...) 方法的日志库。在这种情况下,我使用logger.LogInfo(...)。我相信自从Microsoft.Extensions.Logging.Abstractions之后标准已经改变了

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 2014-02-10
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      相关资源
      最近更新 更多