什么是只读静态记录器字段的标准命名约定?

时间:2015-02-11 18:01:15

标签: c# naming-conventions nlog

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

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

在所有NLog示例中,记录器字段是Camel: 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

那么这个场景的最佳约定是什么?

2 个答案:

答案 0 :(得分:0)

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

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

 -private static readonly Type Name
 -private readonly Type _name

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

答案 1 :(得分:0)

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

我个人喜欢将 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

以来标准已经改变