VB.NET命名空间和类语法

时间:2011-04-07 14:37:06

标签: vb.net class syntax visual-studio-2005 namespaces

我在下面的代码中缺少什么?也许范围问题?语法问题?

我在我的VB.NET项目中添加了一个新文件class1.vb,其中包含:

Namespace MyFunc1
    Public Class MyFunc2

        Public Function Add(ByVal n1 As Int16, ByVal n2 As Int16) As Int16
            return n1 + n2  ' Edited from: "Add = n1 + n2" (same thing)
        End Function

    End Class
End Namespace

回到我的form1.vb,这是接近顶部:

Imports MyCode.MyFunc1  ' A handful of generic functions

在form1.vb中,我以为我曾经能够通过以下方式调用我的函数:

n = MyFunc1.Add(15, 16)

错误说“它不是会员”。 这些也无法按预期工作:

n = MyFunc2.Add(15, 16)
n = MyFunc1.MyFunc2.Add(15, 16)
n = Add(15, 16)

我确信,这曾经有用过:

n = MyFunc1.Add(15, 16)

2 个答案:

答案 0 :(得分:1)

您必须先创建实例,或者如果您不想使用对象,则可能需要创建模块,而不是

您可能错过了一个返回,它应该是以下内容。

Namespace MyFunc1
    Public Class MyFunc2

        Public Function Add(ByVal n1 As Int16, ByVal n2 As Int16) As Int16
            return n1 + n2
        End Function

    End Class
End Namespace

如果您想使用模块:

Namespace MyFunc1
    Module MyFunc2

        Function Add(ByVal n1 As Int16, ByVal n2 As Int16) As Int16
            return n1 + n2
        End Function

    End Module
End Namespace

如果您想使用课程:

您必须先创建MyFunc2

的实例
Dim myFuncObj as MyFunc2 = new MyFunc2

然后使用参数

在对象上调用方法
dim result as Int16 = myFuncObj.Add(15,16)

我猜你是来自Visual Basic 6.0背景。

答案 1 :(得分:1)

为了以您想要的方式执行此操作,您需要创建类的实例,如@Chipmunk建议或使方法共享。你也应该摆脱旧的VB6方法。您的方法应如下所示:

Public Shared Function Add(ByVal n1 As Int16, ByVal n2 As Int16) As Int16
    Return n1 + n2
End Function

修改
然后使用以下方法调用:

Dim x as Int16 = MyFunc1.MyFunc2.Add(15, 16)

使用Call假设您正在执行sub而不是函数。函数的目的是返回数据。只需Call它就不会产生预期的效果。

编辑2(示例)

您可以在@Chipmunk状态下使用模块,也可以使用类。我的偏好仅仅是因为MS没有对模块做出任何想法(他们为其中一个版本取消了它们 - 我忘记了 - 然后将它们带回来)。

班级方法

Namespace MyFunc1
    Public Class MyFunc2

        Public Shared Function Add(ByVal n1 As Int16, ByVal n2 As Int16) As Int16
            Return n1 + n2    
        End Function

    End Class
End Namespace

Form1.vb中的用法

Imports MyFunc1

...

Public Sub DoAdd()
    Dim x as Int16 = MyFunc2.Add(15, 16)  ' MyFunc1 Namespace imported, MyFunc2
                                          ' is assumed. No instance is created
End Sub

模块方法

Public Module MyFunctions

    ' Notice no shared modifier here. The module uses the legacy module
    ' concept to assume that it is shared
    Public Function Add(ByVal n1 as Int16, ByVal n2 as Int16) As Int16
        Return n1 + n2
    End Function

End Module

Form1.vb中的用法

由于模块将位于项目中引用的命名空间中,因此您只需直接调用它:

Public Sub DoAdd()
    Dim x as Int16 = MyFunctions.Add(15, 16)  ' This assumes that your MyFunctions
                                              ' module is in an imported namespace
End Sub