编译器试图通过此错误消息告诉您什么
对非共享成员的引用需要对象引用
StartGettingQuotesLevel2 子例程是 instance method 不是 shared 或类方法,请参阅更详细的解释here
要调用实例方法,您需要有一个对象实例来调用它。在您的情况下,类类型 QuoteMgr 的对象实例。如下例所示:
' create a new QuoteMgr object instance
Dim myQuoteMgr As QuoteMgr = New QuoteMgr()
' call its instance method with "abc" as its oSymbol argument.
myQuoteMgr.StartGettingQuotesLevel2("abc")
您可能只希望主窗体创建和使用一个QuoteMgr 对象实例。在这种情况下,您可以将其设为主表单的成员变量并创建一次。
Public Partial Class MainForm
' Create it as a private member variable of the main form
Private m_QuoteMgr As QuoteMgr = New QuoteMgr()
' Use it when "some" button is pressed
Private Sub btnSome_Click(sender As Object, e As EventArgs) Handles btnSome.Click
m_QuoteMgr.StartGettingQuotesLevel2(txtSymbol.Text)
' And possibly do something with the results.
End Sub
End Class
此外,如果您的 QuoteMgr 类的实例依赖于其他对象实例来完成它们的任务,您必须将这些实例作为 提供给 QuoteMgr 类的 constructor 方法其构造函数的方法参数的参数。构造函数 (Sub New(...)) 如下所示:
Public Class QuoteMgr
' This is a constructor that takes two arguments
' - oMainSymbol: a string value
' - oKernel: an instance of the type Kernel
Public Sub New(oMainSymbol As String, ByRef oKernel As Kernel)
' ....
End Sub
End Class
也就是说,当你创建一个QuoteMgr 实例时,你必须使用它需要的东西来调用它的构造方法,例如
' There must be an instance of Kernel created somewhere.
Dim myKernel As Kernel = ....
' create a new QuoteMgr object instance with these arguments:
' - oMainSymbol = "SYMABC"
' - oKernel = myKernel
Dim myQuoteMgr As QuoteMgr = New QuoteMgr("SYMABC", myKernel)
其他一些建议
- 我提供的解释是关于基本的 VB.NET 语言功能(例如,以粗体突出显示的术语)。我建议您在对现有代码进行任何更改之前,(1) 对其进行备份,(2) 尝试阅读教程并练习一些较小的内容。
- 编译器(实际上)总是正确的。当它给您一条错误消息时,请仔细阅读,它会指出错误所在的行以及一条消息,告诉您它需要什么或缺少什么。
- Stack Overflow 的目的不是提供教程或代码。这是一个问答网站,其中最好的问题和答案涉及特定的、描述的编程问题,并且可以提供简洁的答案。