我想知道在需要公开WinAPI枚举时要遵循哪种正确的做法。
(我认为这个问题同时影响C#和VB.Net,因为它只是一个成员可见性问题)
我有一个NativeMethods
类,表示 MSDN ,以便在P / Invoking时遵循最佳做法,好吧,在NativeMethods
我已宣布SetSystemCursor
功能来自Windows API,以及id
函数的SetSystemCursor
参数所需的枚举。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms648395%28v=vs.85%29.aspx
然后,我做了一个小包装:
Public Shared Function SetSystemCursor(ByVal filePath As String,
ByVal cursorType As NativeMethods.SystemCursorId) As Boolean
Return NativeMethods.SetSystemCursor(NativeMethods.LoadCursorFromFile(filePath), cursorType)
End Function
请注意cursorType
参数,问题是SystemCursorId
枚举不公开,因为正如我所说的是调用NativeMethods
内定义的平台的一部分class,所以,为了能够使用包装器,我可以做两件事,首先公开SystemCursorId
Enum ...这意味着将 Enum 移到私人NativeMethods
这样的类:
Public Class MyClass
Private Class NativeMethods
' ...
End Class
Public Enum SystemCursorId
Arrow = 32512
Crosshair = 32515
End Enum
End Class
或者其次,在NativeMethods
类之外重新声明相同的 Enum 以公开它,如下所示:
Public Class MyClass
Private Class NativeMethods
Friend Enum SystemCursorId
Arrow = 32512
Crosshair = 32515
End Enum
End Class
Public Enum SystemCursorId
Arrow = NativeMethods.SystemCursorId.Arrow
Crosshair = NativeMethods.SystemCursorId.Crosshair
End Enum
End Class
那么,在这种情况下,这是推荐的编程实践?