Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类NativeMethods是在.NET中专门处理的吗?_C#_.net_Pinvoke_Native Methods - Fatal编程技术网

C# 类NativeMethods是在.NET中专门处理的吗?

C# 类NativeMethods是在.NET中专门处理的吗?,c#,.net,pinvoke,native-methods,C#,.net,Pinvoke,Native Methods,本页中描述的三个类是否在.NET Framework中专门处理?(国家方法、安全方法和非预防性方法) 我问的原因是我想知道是否可以创建NativeMethods类的类别。例如: ComNativeMethods User32NativeMethods OleStorageNativeMethods CLR不专门处理这些问题。建议在名为NativeMethods、SafeNativeMethods或UnsafentiveMethods的类中调用P/Invokes 如果您在程序集上运行FxCop,

本页中描述的三个类是否在.NET Framework中专门处理?(国家方法、安全方法和非预防性方法)

我问的原因是我想知道是否可以创建NativeMethods类的类别。例如:

ComNativeMethods
User32NativeMethods
OleStorageNativeMethods

CLR不专门处理这些问题。建议在名为NativeMethods、SafeNativeMethods或UnsafentiveMethods的类中调用P/Invokes


如果您在程序集上运行FxCop,您将看到此建议发挥作用。

这只是一个约定,要求您应该将p/invoke方法放置在名为*NativeMethods的类中,但没有技术约束来阻止您以自己的方式执行…

这是约定,不是要求。如果您反映到CLR中并查看其中的代码,您通常会在NativeMethods类中看到P/Invoke代码。我相信FxCop会建议在遇到P/Invoke代码时将其放入这样的类中。

您可以这样命名您的类,但您将继续得到代码分析警告CA1060。此警告表示您没有遵守约定。因此,为了防止出现此警告,在命名具有P/Invoke方法的类时,需要遵循约定。如果要对P/Invoke方法进行分类,可以使用名称空间。例如:

ComNativeMethods
User32NativeMethods
OleStorageNativeMethods
  • MyProject.Com.NativeMethods
  • MyProject.User32.NativeMethods
  • MyProject.OleStorage.NativeMethods

我对该链接的解释是,它是一种约定,而不是运行时做任何不同的事情。开发人员负责在类上放置适当的安全属性。例如:“NativeMethods-此类不禁止非托管代码权限的堆栈遍历。(System.Security.SuppressUnmanagedCodeSecurityAttribute不得应用于此类。)”也与此相关:“这些类类似于NativeMethods类;但是,它们通过使用名为SuppressUnmanagedCodeSecurityAttribute的特殊属性进行标记。应用此属性时,运行时不会执行完整堆栈遍历以确保所有调用者都具有UnmanagedCode权限。运行时通常在启动时检查此权限。。。但是,您应该非常小心地使用此属性。如果它的实现不正确,可能会带来严重的安全问题.“谢谢,我已更正。我已更新了我的答案。