我正在编写一个 C 包装器,并希望使用 typedef 等价物来定义一些在相当多的源文件中应该有效的类型。这些“类型”只是 [u]int16/32/64_t 的不同别名,但对于区分函数参数很有用。
可以使用using MyId=System.Int32;,但就我所见,这需要在每个文件中重新声明......有没有更好的方法?
一种替代方法是使用隐式转换为基础类型的结构。
public struct MyHandle
{
private int _handle;
internal MyHandle(int handle)
{
_handle = handle;
}
public static implicit operator int(MyHandle handle)
{
return handle._handle;
}
}
Run Code Online (Sandbox Code Playgroud)
您的内部代码仍然可以通过隐式转换将其用作基础类型(在本例中为 int ),但您将其作为强类型公开给用户。您的用户还可以看到 int 值,尽管这对他们来说实际上毫无意义。它们无法直接将 int 转换为您的 Handle 类型,因为构造函数位于程序集内部,并且您没有为另一个方向提供转换运算符。
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |