La classe NativeMethods è gestita appositamente in .NET?
-
22-07-2019 - |
Domanda
https://msdn.microsoft.com /en-us/library/ms182161.aspx
Le tre classi descritte in questo paging sono gestite appositamente in .NET Framework? (NativeMethods, SafeNativeMethods e UnsafeNativeMethods)
Il motivo che sto chiedendo è che mi chiedo se sia giusto creare categorie di classi NativeMethods. Ad esempio:
ComNativeMethods
User32NativeMethods
OleStorageNativeMethods
Soluzione
È una convenzione, non un requisito. Se rifletti nel CLR e dai un'occhiata al codice lì dentro, vedrai spesso il codice P / Invoke all'interno di una classe NativeMethods. Credo che FxCop raccomanderà di inserire il codice P / Invoke in una classe come questa se lo incontra.
Altri suggerimenti
È solo una convenzione che dice che dovresti inserire i metodi p / invoke nelle classi denominate * NativeMethods, ma non ci sono vincoli tecnici che ti impediscono di farlo a modo tuo ...
Puoi assegnare un nome alle tue classi in questo modo, ma continuerai a ricevere l'avviso di analisi del codice CA1060. Questo avviso indica che non stai seguendo la convenzione. Quindi, per evitare questo avviso, è necessario seguire la convenzione quando si nominano le classi che hanno metodi P / Invoke. Se vuoi categorizzare i tuoi metodi P / Invoke, puoi usare gli spazi dei nomi. Ad esempio:
- MyProject.Com.NativeMethods
- MyProject.User32.NativeMethods
- MyProject.OleStorage.NativeMethods
Non sono gestiti appositamente dal CLR. Si consiglia semplicemente di inserire P / Invokes in una classe denominata NativeMethods, SafeNativeMethods o UnsafeNativeMethods.
Vedrai questa raccomandazione entrare in gioco se esegui FxCop sui tuoi assembly.