代码之家  ›  专栏  ›  技术社区  ›  Danvil

在多个源文件中以c格式键入def

c#
  •  3
  • Danvil  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 14 年前
        1
  •  4
  •   Dan Bryant    14 年前

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

    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强制转换为句柄类型,因为构造函数是程序集的内部,而您没有为另一个方向提供转换运算符。

        2
  •  0
  •   Thomas    14 年前

    因为我假设您想区分合法使用say uint32和您的自定义类型,是的,您需要在任何希望使用它的地方手动引用您的别名。