NativeMethods / SafeNativeMethods / UnsafeNativeMethods の使い分け


Visual Studio のコード分析ツールが、オイラが昔組んだ P/Invoke コードに対して警告を発しています。

> CA1060 'MyClass.WriteFile(...)' は P/Invoke メソッドであるため、 NativeMethods、
> SafeNativeMethods、または UnsafeNativeMethods に名前指定されたクラスで定義しなければなりません。

警告の意味と対処方法は [CA1060](https://docs.microsoft.com/ja-jp/visualstudio/code-
quality/ca1060-move-p-invokes-to-nativemethods-
class?view=vs-2015&redirectedfrom=MSDN)
の解説ページに書いてあり理解できるのですが、ではこの３者をどう使い分けるとよいのかは具体的な方針が書かれていません。

Q1. ここでいう Safe / Unsafe は具体的にどんな安全性を意図しているのでしょうか  
Q2. どう使い分けると (この仕様を提出してきた Microsoft の意図として) 適切ですか  
Q3. 性能的・ユーザーインターフェイス的違いはありますか




Uncle-
Keiさんが説明してくれていますが、NativeMethods、SafeNativeMethods、UnsafeNativeMethodsでクラス名の使い分け、更にクラス名に応じたコードアクセスセキュリティを適用することが目的だったようです。

しかし、[.NET
4からコードアクセスセキュリティが廃止（デフォルトで無効化）](https://www.atmarkit.co.jp/fdotnet/special/dotnet4security_01/dotnet4security_01_01.html)されているので、クラス名の使い分けは今となっては意味がないかもしれません。

