VB.NET中typedef的等价或解决方法是什么?

时间:2011-12-22 06:04:01

标签: vb.net

我正在编写一个VB.NET应用程序,它大量处理集合类型。请参阅以下代码:

Dim sub_Collection As System.Collections.Generic.Dictionary(Of String, 
                             System.Collections.ObjectModel.Collection)

我必须多次键入上面的行。如果我更改了集合类型,那么我必须对所有实例进行更改。因此,如果有一种方法可以使用“typedef equivalent”,那么我可以摆脱所有这些问题。我尝试使用导入,但它仅用于命名空间,不能用于类。非常感谢任何帮助。

注意:我使用的是VB 2008,Windows XP。应用程序类型是Windows窗体(VB)。

修改     我根据code_gray的回答做了一些尝试。

这是第一次尝试。

Imports dictionary_WaterBill = System.Collections.Generic.Dictionary(Of String, System.Collections.ObjectModel.Collection(Of WaterBill))
Structure WaterBill
...
...
End Structure

我收到错误

Error:Type 'WaterBill' is not defined.

这是尝试2。

Structure WaterBill
...
...
End Structure
Imports dictionary_WaterBill = System.Collections.Generic.Dictionary(Of String,     
System.Collections.ObjectModel.Collection(Of WaterBill))

我收到错误

Error:'Imports' statements must precede any declarations.

欢迎任何人就此问题发表意见。

2 个答案:

答案 0 :(得分:3)

简单的解决方案就是为您正在使用的两个名称空间添加Imports statement。马上就可以消除一半的长型标识符。

在代码文件的顶部,放置以下行:

Imports System.Collections
Imports System.Collections.Generic
Imports System.Collections.ObjectModel

然后您的声明可以更改为:

Dim sub_Collection As Dictionary(Of String, Collection)

我推荐这种方法,因为它仍然使用标准名称,这使得代码易于为其他程序员阅读。


另一种方法是使用Imports语句来声明别名。类似的东西:

Imports GenericDict = System.Collections.Generic.Dictionary(Of String,
                            System.Collections.ObjectModel.Collection)

然后您可以将声明更改为:

Dim sub_Collection As GenericDict


***顺便说一句,为了使这些样本中的任何一个得到编译,你必须为Collection指定一个类型,例如Collection(Of String)

答案 1 :(得分:2)

创建一个没有内容的继承类:

Class WaterBillDictionary
    Inherits System.Collections.Generic.Dictionary(Of String, System.Collections.ObjectModel.Collection(Of WaterBill))
End Class

Structure WaterBill
    ...
End Structure

如果你想要一个特定的构造函数,你必须编写一个接受参数的包装器并将它们传递给基础构造函数。例如:

Public Sub New()
    MyBase.New()
End Sub

Public Sub New(capacity As Integer)
    MyBase.New(capacity)
End Sub

如果您需要更改WaterBillDictionary的名称,可以使用Visual Studio的重命名功能自动更改整个解决方案中的名称。