在VB.NET中强制执行类型别名

在VB.NET中强制执行类型别名,vb.net,declarative,type-alias,Vb.net,Declarative,Type Alias,在VB.NET或C#中,如何对类型进行别名处理,以便在函数中将别名用作参数类型时,意外使用非别名类型是错误的 i、 e 或者也许有更好的方法来解决这个问题 总的来说,我希望IDE强制我知道如果我抛出int表示Flags,或者States和Strings表示Names、Propertys和Records,我在做什么 帮忙 我从来都不喜欢.NET中的类型别名。这会导致代码不精确,并且无法立即清楚发生了什么。在您的示例中,当个人查找AccessSpecifier.vb文件(或类)时,他们找不到它 此外

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

i、 e

或者也许有更好的方法来解决这个问题

总的来说,我希望IDE强制我知道如果我抛出
int
表示
Flag
s,或者
State
s和
Strings
表示
Name
s、
Property
s和
Record
s,我在做什么


帮忙

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

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


一个更好的选项(如更易于阅读、更易于维护和更清楚的意图)是创建一个类并重载类型转换运算符,以便自动转换为字符串或从字符串转换为字符串。通过这种方式,您可以像使用字符串一样使用新类,但您可以进行严格的类型检查。

只需在源代码文件顶部启用Option strict。
Option strict
可防止隐式转换。这里没有转换,因为类型相同。呃,不,整数与字符串不同。这不是你试图避免的吗?关闭Option Strict后,编译器很乐意生成代码,尝试将字符串转换为整数。在运行时使用kaboom,但这不起作用。否则,vb程序员倾向于在该语言中使用动态类型。考虑C语言作为一种非常严格的打字语言。噢!呵呵,不,对不起。我指的是我上面的例子
AccessSpecifier
Alias
System.String
,我想在传递
String
文本或常规
String
变量时发出警告/出错。您没有领会我的意思,尽管我很可能没有领会您的意思。vb.net编译器已经具有强制执行严格类型的能力。使用该选项。你正在寻找另一种不起作用的方法。因为别名只是一个名称替换,不会改变基本的编译器规则。所以不要使用它,它不能解决你的问题。使用这个选项。我完全忘记了.NET框架中的隐式转换。谢谢你。
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