跨多个源文件的 C# 中的 Typedef

Dan*_*vil 5 c#

我正在编写一个 C 包装器,并希望使用 typedef 等价物来定义一些在相当多的源文件中应该有效的类型。这些“类型”只是 [u]int16/32/64_t 的不同别名,但对于区分函数参数很有用。

可以使用using MyId=System.Int32;,但就我所见,这需要在每个文件中重新声明......有没有更好的方法?

Dan*_*ant 4

一种替代方法是使用隐式转换为基础类型的结构。

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 类型,因为构造函数位于程序集内部,并且您没有为另一个方向提供转换运算符。