【发布时间】:2011-11-26 23:20:21
【问题描述】:
我正在编写一个封装 USB 设备驱动程序的类库。 该设备有自己的类库,由硬件供应商提供。
很多时候,尤其是在处理旧的 DLL 或 COM 程序集时,如果一切正常,有些方法(正确的函数)会返回 TRUE,如果发生任何错误,则返回 FALSE。 通常,这些方法会在其参数之一中返回有关错误的信息,或者在 GetLastError 方法中或在 OnError 事件中单独返回。
现在,通常我会在我的类库中处理所有本机 .NET 异常,在本地处理或重新抛出给客户端(如果错误有用的话)。但是如何处理隐藏在供应商方法中的所有其他错误? (在 true 中我没有例外,但只返回 TRUE 或 FALSE 值)。
我们以“CONNECT”方法为例,将客户端连接到 USB 设备。
我是这样封装方法的:
Public Sub Connect()
oVendorDevice.connect()
End Sub
现在,如果发生任何连接错误,供应商的连接方法将返回 FALSE。 但我不知道为什么连接失败。要知道连接失败的原因,我必须调用(例如)GetLastError 方法,它会为我提供有关错误的信息。 (但不要忘记其他供应商使用其他策略,例如在方法的参数或 OnError 事件中返回错误。
现在,为了遵循良好的 .NET 异常处理策略,我可以编写如下内容:
Public Sub Connect()
Dim res As Boolean = oVendorDevice.connect()
If res = False Then
Dim sError As String = oVendorDevice.GetLastError
Throw New Exception(sError) 'or a my own exception class
End If
End Sub
但我也可以通过类似的方式保留供应商策略
Public Function Connect2(ByRef Err As String) As Boolean
Connect2 = oVendorDevice.connect()
Err = oVendorDevice.GetLastError
End Function
或者像这样
Public Function Connect3() As Boolean
Connect3 = oVendorDevice.connect()
MyGetLastError = oVendorDevice.GetLastError
End Function
“封装供应商类库的错误”的最佳 .NET 方式是什么?
【问题讨论】:
标签: .net vb.net class exception exception-handling