Есть ли порядок внешнего и статического вещества?

Сравнивая два файла (старый и новый), я вижу:

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.Это просто вопрос стиля кодирования.

Другие вопросы по тегам