在几个源文件中的C#中输入typedef

时间:2010-05-06 15:35:19

标签: c#

我正在编写一个C包装器,想要使用typedef aquivalent定义一些在很多源文件中应该有效的类型。那些“类型”只是[u] int16 / 32 / 64_t的不同别名,但对区分函数参数很有用。

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

2 个答案:

答案 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和您的自定义类型的合法使用,是的,您需要手动引用您希望在任何地方使用的别名。