![]() |
1
7
一
注意,我做了这个静态的,它
编辑:汉斯是对的,你应该检查返回值。您可以在第一次使用它时,或者当类型初始化时,这样做——通常类型初始值设定项抛出异常是一个坏主意,但是您应该看看影响是什么。 一 严格来说,静态只读字段可以在声明或静态构造函数中分配;实例只读字段可以在声明或任何实例构造函数中分配。它 可以 多次分配,即 通常 不是很有用,只是偶尔有用。 |
![]() |
2
3
这里还有一个考虑。registerWindowMessage()可能会失败,您 真正地 需要检查一下。如果使用它返回的0,那么当出现问题时,很难进行诊断。 这将直接在readonly声明中取消初始化。可以改用静态构造函数。问题是异常消息将隐藏在一个innerException中。也许可以,因为失败是罕见的。 最好的解决方案是一个静态属性getter,它可以延迟地调用API:
如果可以从不同的线程调用,请使用已知的锁定模式。 |
![]() |
3
1
为了增加汉斯给出的答案,您可以做得比简单地抛出一个空的win32exception更好。这适用于使用GetLastError的任何API调用:
这将产生一个信息更丰富的例外。 |
![]() |
Mike Bruno · 访问模拟帐户的私钥 8 年前 |
![]() |
John · 通过P/Invoke使用回调和堆对象的安全方法 9 年前 |
![]() |
Residuum · 带有P/Invoke和指针的泛型 9 年前 |
![]() |
hl3mukkel · 约束与使用SafeHandle的抽象类 10 年前 |