Есть ли порядок внешнего и статического вещества?
Сравнивая два файла (старый и новый), я вижу:
private extern static void SipShowIM(uint dwFlag);
... в старом файле и:
private static extern void SipShowIM(uint dwFlag);
... в новом файле.
Почему они изменились, я не знаю; имеет ли значение то, что на первом месте, внешний или статический?
ОБНОВИТЬ
Решарпер, должно быть, сделал это, потому что я знаю, что не делал этого (напрямую), но есть еще одно отличие между старым:
public volatile static bool ProcessCommands = true;
... и новый:
public static volatile bool ProcessCommands = true;
4 ответа
Нет, согласно спецификации C#, все упорядочения модификаторов метода эквивалентны. Версия 4.0, раздел B.2.7, стр. 493:
Метод-модификаторы:
Метод-модификатор
метод-модификатор метод-модификаторМетод-модификатор:
новый
общественности
защищенный
внутренний
частный
статический
виртуальный
запечатанный
переопределение
Аннотация
внешний
Это явно не статический конструктор, но на странице 497 (все еще раздел B.2.7) оба порядка явно вызываются:
статические-конструктор-модификаторы:
внешняяопция статическая
статический внешнийвыбор
Ну, я не верю, что есть разница между этими двумя видами использования. Я просто считаю код страницы 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
Итак, мои деньги для НЕТ.
Порядок модификаторов методов не имеет значения. Однако обычно это пишется как static extern
,
Такие инструменты, как StyleCop, жалуются на это: SA1206: The 'static' keyword must come before the 'other' keyword in the element declaration.
Это просто вопрос стиля кодирования.