Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中修饰语的顺序有约定吗?_C# - Fatal编程技术网

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>