C#中修饰语的顺序有约定吗?
如果我要使用多个,我应该按什么顺序使用修改器关键字,例如:C#中修饰语的顺序有约定吗?,c#,C#,如果我要使用多个,我应该按什么顺序使用修改器关键字,例如: public,private,protected,virtual,abstract,override,new,static,internal,sealed,以及我忘记的任何其他内容。我通常先从访问修饰符开始,然后是virtual/abstract/sealed/sealed,然后重写/new/等,尽管其他人可能会做不同的操作。但是,访问修饰符几乎总是第一位的。以a或a的形式提供,可以根据Microsoft中某些团队使用的规则验证源代码。
public
,private
,protected
,virtual
,abstract
,override
,new
,static
,internal
,sealed
,以及我忘记的任何其他内容。我通常先从访问修饰符开始,然后是virtual/abstract/sealed/sealed,然后重写/new/等,尽管其他人可能会做不同的操作。但是,访问修饰符几乎总是第一位的。以a或a的形式提供,可以根据Microsoft中某些团队使用的规则验证源代码。StyleCop喜欢访问修饰符放在第一位
编辑:微软本身并不完全一致;不同的团队使用不同的风格。例如,StyleCop建议在名称空间中使用指令,但Roslyn源代码中没有遵循这一点。在某些情况下,有很多可能性。例如,对于下面的类
C
和基类B
public class B
{
public void X()
{
}
}
public class C : B
{
protected internal new static readonly DateTime X;
}
C
中类型为DateTime
的字段不少于五个不同的修饰符,因此有5!==5*4*3*2*1==120
写入同一字段的不同方式!如果不将保护
和内部
放在一起,那将非常混乱,但这仍然是合法的
不确定是否每个人都同意订单的约定。例如,我看到一些人在访问级别(保护级别)修饰符之前添加了
新的修饰符,尽管许多人喜欢总是先添加保护级别修饰符。我查看了Microsoft的,但找不到任何关于应该在成员上添加什么顺序修饰符的参考。同样地,事实证明,看一眼这本书也是徒劳的。不过,还有两条路要走:和
.编辑配置
MSDN页面上说:
在Visual Studio 2017中,您可以使用文件在代码库中定义和维护一致的代码样式
EditorConfig文件示例
为了帮助您入门,下面是一个带有默认选项的.editorconfig文件示例:
###############################
# C# Code Style Rules #
###############################
# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
换句话说:修改器的默认顺序(遵循默认的editorconfig设置)是:
{ public / private / protected / internal / protected internal / private protected } // access modifiers
static
extern
new
{ virtual / abstract / override / sealed override } // inheritance modifiers
readonly
unsafe
volatile
async
再竖琴
然而,这一点更为明确。ReSharper 2018.11的默认值,包括访问修饰符(独占)和继承修饰符(独占),组合在一起为:
{public/protected/internal/private/protected internal/private protected}//访问修饰符
新的
{abstract/virtual/override/sealed override}//继承修饰符
静止的
只读
外行
不安全的
不稳定的
异步的
这存储在下的{solution}.dotsettings
文件中
"/Default/CodeStyle/CodeFormatting/CSharpFormat/MODIFIERS_ORDER/@EntryValue"
节点-ReSharper default2是:
同样,Visual Studio 2015中的IntelliSense也建议将静态
更改为静态新
如果基类中的字段i
也是static
,则相同
也就是说,在GitHub上进行的粗略搜索发现,一些项目会覆盖此默认设置,将继承修饰符和密封的
放在前面,而不是后面。
:
这意味着微软的首选是static new
非常好的答案。如果可能的话,让StyleCop这样的东西来监督对样式指南的遵从性,因为它比把它留给我们人类要可靠得多:)StyleCop的规则似乎不同于MS之前的样式指南。例如,StyleCop讨厌m_u和u作为私有成员的前缀。此外,VS默认代码生成将using语句置于命名空间之外,从而违反了StyleCop。提示:如果您以前有另一个类结构,那么对整个混乱进行排序可能会非常烦人。使用CodeMaid,它可以自动完成。我的印象是,使用语句的行为会因放置位置的不同而有所不同。您遗漏了、、和。这应该是2019年选择的答案
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/MODIFIERS_ORDER/@EntryValue">
public protected internal private new abstract virtual sealed override static readonly extern unsafe volatile async
</s:String>
public class clx
{
public int i = 1;
}
public class cly : clx
{
public static int i = 2; // CS0108, use the new keyword
// Use the following line instead:
// public static new int i = 2;
}
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/MODIFIERS_ORDER/@EntryValue">
public protected internal private static new abstract virtual override sealed readonly extern unsafe volatile async
</s:String>