我在下面的代码中缺少什么?也许范围问题?语法问题?
我在我的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)
答案 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