Класс NativeMethods обрабатывается специально в .NET? - PullRequest
10 голосов
/ 18 сентября 2009

https://msdn.microsoft.com/en-us/library/ms182161.aspx

Три класса, описанные на этой странице, обрабатываются специально в .NET Framework? (NativeMethods, SafeNativeMethods и UnsafeNativeMethods)

Причина, по которой я спрашиваю, заключается в том, что мне интересно, можно ли создавать категории классов NativeMethods. Например:

ComNativeMethods
User32NativeMethods
OleStorageNativeMethods

Ответы [ 4 ]

8 голосов
/ 18 сентября 2009

Это соглашение, а не требование. Если вы поразмышляете над CLR и посмотрите на код, вы часто будете видеть код P / Invoke внутри класса NativeMethods. Я полагаю, что FxCop порекомендует поместить ваш код P / Invoke в подобный класс, если он его встретит.

3 голосов
/ 18 сентября 2009

Это просто соглашение, согласно которому вы должны помещать методы p / invoke в классы с именем * NativeMethods, но нет технических ограничений, которые не позволяют вам делать это по-своему ...

2 голосов
/ 12 февраля 2016

Вы можете называть свои классы таким образом, но вы продолжите получать предупреждение анализа кода CA1060. Это предупреждение означает, что вы не соблюдаете соглашение. Поэтому, чтобы предотвратить это предупреждение, вы должны следовать соглашению при именовании классов, имеющих методы P / Invoke. Если вы хотите классифицировать ваши методы P / Invoke, вы можете использовать пространства имен. Например:

  • MyProject.Com.NativeMethods
  • MyProject.User32.NativeMethods
  • MyProject.OleStorage.NativeMethods
1 голос
/ 18 сентября 2009

Они не обрабатываются специально CLR. Просто рекомендуется практиковать, чтобы ваши P / Вызывались внутри класса с именами NativeMethods, SafeNativeMethods или UnsafeNativeMethods.

Эта рекомендация вступит в силу, если вы запустите FxCop на своих сборках.

...