在VB.NET中强制使用Type Alias

时间:2012-04-06 19:49:49

标签: vb.net declarative type-alias

如何在VB.NET或C#中对类型进行别名处理,以便当别名在函数中用作参数类型时,意外使用非别名类型是错误的?

Imports AccessSpecifier = System.String

Module Accessors
    Delegate Function IoOper(ByRef strm As System.IO.Stream) As Action
    Public Function accessMethod(ByRef spec As AccessSpecifier) As IoOper
        ' implementation
        ' ...
    End Function
End Module

Module Main
    Public Sub Main()
        Dim spec As AccessSpecifier = New AccessSpecifier(CType("READ_WRITE", Char()))
        Dim val = Accessors.accessMethod(spec)
        System.Console.WriteLine(val.GetType())
        Dim shouldFail = Accessors.accessMethod("FAIL_ME")
        System.Console.WriteLine(shouldFail.GetType())
    End Sub
End Module

或许还有更好的方法可以解决这个问题吗?

总的来说,我希望IDE强迫我知道我正在做什么,如果我把Ints扔到Flag s或State s和{{} {1}}表示Strings s,NameProperty s。

帮助?

1 个答案:

答案 0 :(得分:3)

我从未喜欢.NET中的类型别名。它使得代码不精确,并且不能立即清楚发生了什么。在您的示例中,当一个人去寻找AccessSpecifier.vb文件(或类)时,他们找不到它。

此外,别名仅适用于您的项目,并且只能在单个代码文件中使用。因此,您必须在要使用它的所有各种代码文件中定义该别名。

更好(如更容易阅读,更易于维护,更清晰的意图)选项是创建一个类并重载类型转换运算符以自动转换为String或从String转换。通过这种方式,您可以保留使用新类的能力,就好像它是一个String,但是您可以获得严格的类型检查。