比较两个文件(旧文件和新文件),我看到:
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;
答案 0 :(得分:2)
不,这些关键字的顺序无关紧要。
答案 1 :(得分:2)
好吧,我不相信这两种用法有区别。我只考虑 MSDN 页面的代码,我尝试了两种方式(extern static
和static 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 。
答案 2 :(得分:2)
不,根据C#规范,所有方法修饰符排序都是等效的。版本4.0,第B.2.7节,第493页:
方法改性剂:
方法改性剂
method-modifiers方法修饰符方法改性剂:
新
公共
保护
内部
私人
静态
虚拟
密封
覆盖
抽象
外部
这显然不是静态构造函数,但是在第497页(仍然是B.2.7节)中,两个命令都被明确地调出:
静态构造改性剂:
extern opt static
static extern opt
答案 3 :(得分:1)
方法修饰符的顺序无关紧要。然而,它通常写为static extern
。
StyleCop等工具抱怨:SA1206: The 'static' keyword must come before the 'other' keyword in the element declaration.
这只是编码风格的问题。