如何在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,Name
和Property
s。
帮助?
答案 0 :(得分:3)
我从未喜欢.NET中的类型别名。它使得代码不精确,并且不能立即清楚发生了什么。在您的示例中,当一个人去寻找AccessSpecifier.vb文件(或类)时,他们找不到它。
此外,别名仅适用于您的项目,并且只能在单个代码文件中使用。因此,您必须在要使用它的所有各种代码文件中定义该别名。
更好(如更容易阅读,更易于维护,更清晰的意图)选项是创建一个类并重载类型转换运算符以自动转换为String或从String转换。通过这种方式,您可以保留使用新类的能力,就好像它是一个String,但是您可以获得严格的类型检查。