4

比较两个文件(旧的和新的),我看到:

private extern static void SipShowIM(uint dwFlag);

...在旧文件中,并且:

private static extern void SipShowIM(uint dwFlag);

...在新文件中。

为什么他们变了我不知道;哪个先出现重要吗,外部还是静态?

更新

Resharper 必须这样做,因为我知道我没有(直接)这样做,但这是旧版本之间的另一个区别:

public volatile static bool ProcessCommands = true;

...和新的:

public static volatile bool ProcessCommands = true;
4

4 回答 4

2

不,这些关键字的顺序无关紧要。

于 2013-04-17T18:54:30.117 回答
2

不,根据 C# 规范,所有方法修饰符排序都是等价的。4.0 版,B.2.7 节,第 493 页:

方法修饰符:
      方法修饰符
      方法修饰符方法修饰符

方法修饰符:
      新的
      公共
      保护
      内部
      私有
      静态
      虚拟
      密封
      覆盖
      抽象
      外部

这显然不是一个静态构造函数,但在第 497 页(仍然是 B.2.7 节),两个命令都被显式调用:

static-constructor-modifiers:
      extern opt静态
      静态 extern opt

于 2013-04-17T19:34:49.257 回答
2

好吧,我不相信这两种用法之间有区别。我只考虑MSDN页面的代码,我尝试了两种方式(extern staticstatic extern),两种代码都生成相同的IL代码。

.method public hidebysig static int32  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       41 (0x29)
  .maxstack  4
  .locals init ([0] string myString,
           [1] int32 CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldstr      "Enter your message: "
  IL_0006:  call       void [mscorlib]System.Console::Write(string)
  IL_000b:  nop
  IL_000c:  call       string [mscorlib]System.Console::ReadLine()
  IL_0011:  stloc.0
  IL_0012:  ldc.i4.0
  IL_0013:  call       native int [mscorlib]System.IntPtr::op_Explicit(int32)
  IL_0018:  ldloc.0
  IL_0019:  ldstr      "My Message Box"
  IL_001e:  ldc.i4.0
  IL_001f:  call       int32 ProgramConsole.Program::MessageBox(native int,
                                                                string,
                                                                string,
                                                                int32)
  IL_0024:  stloc.1
  IL_0025:  br.s       IL_0027
  IL_0027:  ldloc.1
  IL_0028:  ret
} // end of method Program::Main

所以,我的钱是NO

于 2013-04-17T19:11:55.130 回答
1

方法修饰符的顺序无关紧要。然而,它通常写为static extern.

StyleCop 之类的工具抱怨这一点:SA1206: The 'static' keyword must come before the 'other' keyword in the element declaration. 这只是编码风格的问题。

于 2013-04-17T19:15:10.737 回答