我正在写一个 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;
}
}
您的内部代码仍然可以通过隐式转换将其用作基础类型(在本例中为 int),但您将其作为强类型公开给用户。您的用户也可以看到 int 值,尽管它对他们来说实际上毫无意义。它们不能直接将 int 转换为您的 Handle 类型,因为构造函数在您的程序集内部并且您没有为另一个方向提供转换运算符。
关于c# - C# 中跨多个源文件的 Typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2782350/