我正在编写一个C包装器,想要使用typedef aquivalent定义一些在很多源文件中应该有效的类型。那些“类型”只是[u] int16 / 32 / 64_t的不同别名,但对区分函数参数很有用。
可以使用using MyId=System.Int32;
,但就我看来,这需要在每个文件中重新声明...有更好的方法吗?
答案 0 :(得分:4)
另一种方法是使用一个隐式转换为底层类型的结构。
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类型,因为构造函数是程序集内部的,并且您没有为另一个方向提供转换运算符。
答案 1 :(得分:0)
由于我假设您要区分对UInt32和您的自定义类型的合法使用,是的,您需要手动引用您希望在任何地方使用的别名。