2

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

IE

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到处乱说意味着Flags,或者States 和Strings周围意味着Names,Propertys 和Records。

帮助?

4

1 回答 1

3

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

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

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

于 2012-04-06T23:17:59.297 回答