与 Class 共享值并通过 属性 返回值
Sharing Values With a Class And Returning A Value Via Property
我不认为我能够很好地解释自己,如果这没有意义,我很抱歉。
下面的示例有两个函数可以执行一些工作正常的计算:
Sub Example()
Dim mValue = Multiply(2, 2)
Dim dValue = Divide(2, 2)
End Sub
Function Multiply(ByVal value1 As Double, ByVal value2 As Double) As Double
Return value1 * value2
End Function
Function Divide(ByVal value1 As Double, ByVal value2 As Double) As Double
Return value1 / value2
End Function
虽然我想做的是类似于下面的事情(这不起作用,但希望这能证明我正在尝试做的事情)。我想与 class 共享参数,然后 select 和 属性 共享参数 return 一个值,例如类似于 DataGridView1.Item(1, 1).Size
。有点像 属性 里面的 属性,但我搜索了那个 return 没有任何好的结果。
Sub example2()
Dim mValue = Values(2, 2).Multiply()
Dim dValue = Values(2, 2).Divide()
End Sub
Public Class Values
Public Shared _Value1, _Value2 As Integer
Public Sub New(ByVal Value1 As Double, ByVal Value2 As Double)
_Value1 = Value1
_Value2 = Value2
End Sub
Public Shared ReadOnly Property Multiply() As Double
Get
Return _Value1 * _Value2
End Get
End Property
Public Shared ReadOnly Property Divide() As Double
Get
Return _Value1 / _Value2
End Get
End Property
End Class
我认为我正在尝试做的事情是可能的,我只是觉得我遗漏了一些小东西。任何帮助或指导都会很棒!
您需要决定是要使用 Shared
成员还是实例成员。您有一个不是 Shared
的构造函数,这意味着您需要创建一个实例,您可以使用 New
关键字来创建实例。如果您创建一个实例,那么您需要实例成员才能访问该实例:
Public Class Values
Private value1 As Integer
Private value2 As Integer
Public Sub New(value1 As Integer, value2 As Integer)
Me.value1 = value1
Me.value2 = value2
End Sub
Public Function Multiply() As Integer
Return value1 * value2
End Function
Public Function Divide() As Double
Return value1 / value2
End Function
End Class
Sub Example()
Dim values = New Values(2, 2)
Dim product = values.Multiply()
Dim quotient = values.Divide()
End Sub
另一种方法是使用所有 Shared
成员而不创建实例。数据通过 Shared
属性输入并通过 Shared
方法输出:
Public Class Values
Public Shared Property Value1 As Integer
Public Shared Property Value2 As Integer
Public Shared Function Multiply() As Integer
Return Value1 * Value2
End Function
Public Shared Function Divide() As Double
Return Value1 / Value2
End Function
End Class
Sub Example()
Values.Value1 = 2
Values.Value2 = 2
Dim product = Values.Multiply()
Dim quotient = Values.Divide()
End Sub
在第一种情况下,您将在要使用它的地方创建一个 Values
实例,而创建不同实例的任何其他代码都不会对此产生影响。在第二种情况下,因为 class 只有一组属性,您可以将它们设置在一个地方,然后在第二个地方将它们设置为其他东西,然后在第一个地方调用一个方法并期望使用第一组 属性 值的结果。只有一组字段,这些方法将始终使用分配给它们的最后一个值,无论发生在代码的何处。
还值得注意的是,如果您正在考虑定义一个包含所有 Shared
成员的 class,您可能应该改为定义一个模块。模块在幕后编译为 classes,它们本质上会阻止您创建实例,因此模块成员的行为类似于 Shared
class 成员。区别在于您不必使用模块名称限定模块成员,而您必须限定 Shared
class 成员。有些人不喜欢那样,并错误地认为它违反了 OOP 的规则。如果您愿意,您仍然可以限定模块成员,但是 classes 强制您这样做。
如果您想要单行代码,那么您可以同时使用实例成员和 Shared
成员,但它们看起来会有些不同。如果您正在使用实例成员,那么您需要一个实例,因此您必须调用一个构造函数。不过,没有必要保留该对象。您可以使用它并根据需要将其丢弃,例如
Dim product = New Values(2, 2).Multiply()
不过,如果您对相同的数字执行多个操作,那会有点浪费,因为您将创建多个相同的实例,例如
Dim product = New Values(2, 2).Multiply()
Dim quotient = New Values(2, 2).Divide()
如果您正在使用 Shared
成员,那么您必须重载方法以允许您传入或不传入值:
Public Class Values
Public Shared Property Value1 As Integer
Public Shared Property Value2 As Integer
Public Overloads Shared Function Multiply() As Integer
Return Value1 * Value2
End Function
Public Overloads Shared Function Multiply(value1 As Integer, value2 As Integer) As Integer
Values.Value1 = value1
Values.Value2 = value2
Return Multiply()
End Function
Public Overloads Shared Function Divide() As Double
Return Value1 / Value2
End Function
Public Overloads Shared Function Divide(value1 As Integer, value2 As Integer) As Double
Values.Value1 = value1
Values.Value2 = value2
Return Divide()
End Function
End Class
您可以在调用方法或使用现有值时传入新值,例如
Dim product = Values.Multiply(2, 2)
Dim quotient = Values.Divide()
如有遗漏请指正,我在这里创建class库
Namespace calulation
Public Class Operations
Private i_v1 As Integer
Private i_v2 As Integer
Private obj_mul As Multiply
Private d_value As Double
Public ReadOnly Property Multiply As Double
Get
obj_mul = New Multiply(i_v1, i_v2)
d_value = obj_mul.GetValues
Return d_value
End Get
End Property
Private obj_divide As Divide
Public ReadOnly Property Divide As Double
Get
obj_divide = New Divide(i_v1, i_v2)
d_value = obj_divide.GetValues
Return d_value
End Get
End Property
Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)
i_v1 = v1
i_v2 = v2
End Sub
End Class
Public Class Multiply
Private Shared s_value1 As Integer
Private Shared s_value2 As Integer
Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)
s_value1 = v1
s_value2 = v2
End Sub
Public Function GetValues() As Double
Return s_value1 * s_value2
End Function
End Class
Public Class Divide
Private Shared s_value1 As Integer
Private Shared s_value2 As Integer
Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)
s_value1 = v1
s_value2 = v2
End Sub
Public Function GetValues() As Double
Try
Return s_value1 / s_value2
Catch ex As Exception
Throw ex
End Try
End Function
End Class
End Namespace
现在将该库的引用放入您的 windows 表单项目
Imports calculation.calulation
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Try
Dim obj As Double = New Operations(2, 3).Multiply
Dim obj2 As Double = New Operations(2, 3).Divide
MsgBox(obj.ToString)
MsgBox(obj2.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
我不认为我能够很好地解释自己,如果这没有意义,我很抱歉。
下面的示例有两个函数可以执行一些工作正常的计算:
Sub Example()
Dim mValue = Multiply(2, 2)
Dim dValue = Divide(2, 2)
End Sub
Function Multiply(ByVal value1 As Double, ByVal value2 As Double) As Double
Return value1 * value2
End Function
Function Divide(ByVal value1 As Double, ByVal value2 As Double) As Double
Return value1 / value2
End Function
虽然我想做的是类似于下面的事情(这不起作用,但希望这能证明我正在尝试做的事情)。我想与 class 共享参数,然后 select 和 属性 共享参数 return 一个值,例如类似于 DataGridView1.Item(1, 1).Size
。有点像 属性 里面的 属性,但我搜索了那个 return 没有任何好的结果。
Sub example2()
Dim mValue = Values(2, 2).Multiply()
Dim dValue = Values(2, 2).Divide()
End Sub
Public Class Values
Public Shared _Value1, _Value2 As Integer
Public Sub New(ByVal Value1 As Double, ByVal Value2 As Double)
_Value1 = Value1
_Value2 = Value2
End Sub
Public Shared ReadOnly Property Multiply() As Double
Get
Return _Value1 * _Value2
End Get
End Property
Public Shared ReadOnly Property Divide() As Double
Get
Return _Value1 / _Value2
End Get
End Property
End Class
我认为我正在尝试做的事情是可能的,我只是觉得我遗漏了一些小东西。任何帮助或指导都会很棒!
您需要决定是要使用 Shared
成员还是实例成员。您有一个不是 Shared
的构造函数,这意味着您需要创建一个实例,您可以使用 New
关键字来创建实例。如果您创建一个实例,那么您需要实例成员才能访问该实例:
Public Class Values
Private value1 As Integer
Private value2 As Integer
Public Sub New(value1 As Integer, value2 As Integer)
Me.value1 = value1
Me.value2 = value2
End Sub
Public Function Multiply() As Integer
Return value1 * value2
End Function
Public Function Divide() As Double
Return value1 / value2
End Function
End Class
Sub Example()
Dim values = New Values(2, 2)
Dim product = values.Multiply()
Dim quotient = values.Divide()
End Sub
另一种方法是使用所有 Shared
成员而不创建实例。数据通过 Shared
属性输入并通过 Shared
方法输出:
Public Class Values
Public Shared Property Value1 As Integer
Public Shared Property Value2 As Integer
Public Shared Function Multiply() As Integer
Return Value1 * Value2
End Function
Public Shared Function Divide() As Double
Return Value1 / Value2
End Function
End Class
Sub Example()
Values.Value1 = 2
Values.Value2 = 2
Dim product = Values.Multiply()
Dim quotient = Values.Divide()
End Sub
在第一种情况下,您将在要使用它的地方创建一个 Values
实例,而创建不同实例的任何其他代码都不会对此产生影响。在第二种情况下,因为 class 只有一组属性,您可以将它们设置在一个地方,然后在第二个地方将它们设置为其他东西,然后在第一个地方调用一个方法并期望使用第一组 属性 值的结果。只有一组字段,这些方法将始终使用分配给它们的最后一个值,无论发生在代码的何处。
还值得注意的是,如果您正在考虑定义一个包含所有 Shared
成员的 class,您可能应该改为定义一个模块。模块在幕后编译为 classes,它们本质上会阻止您创建实例,因此模块成员的行为类似于 Shared
class 成员。区别在于您不必使用模块名称限定模块成员,而您必须限定 Shared
class 成员。有些人不喜欢那样,并错误地认为它违反了 OOP 的规则。如果您愿意,您仍然可以限定模块成员,但是 classes 强制您这样做。
如果您想要单行代码,那么您可以同时使用实例成员和 Shared
成员,但它们看起来会有些不同。如果您正在使用实例成员,那么您需要一个实例,因此您必须调用一个构造函数。不过,没有必要保留该对象。您可以使用它并根据需要将其丢弃,例如
Dim product = New Values(2, 2).Multiply()
不过,如果您对相同的数字执行多个操作,那会有点浪费,因为您将创建多个相同的实例,例如
Dim product = New Values(2, 2).Multiply()
Dim quotient = New Values(2, 2).Divide()
如果您正在使用 Shared
成员,那么您必须重载方法以允许您传入或不传入值:
Public Class Values
Public Shared Property Value1 As Integer
Public Shared Property Value2 As Integer
Public Overloads Shared Function Multiply() As Integer
Return Value1 * Value2
End Function
Public Overloads Shared Function Multiply(value1 As Integer, value2 As Integer) As Integer
Values.Value1 = value1
Values.Value2 = value2
Return Multiply()
End Function
Public Overloads Shared Function Divide() As Double
Return Value1 / Value2
End Function
Public Overloads Shared Function Divide(value1 As Integer, value2 As Integer) As Double
Values.Value1 = value1
Values.Value2 = value2
Return Divide()
End Function
End Class
您可以在调用方法或使用现有值时传入新值,例如
Dim product = Values.Multiply(2, 2)
Dim quotient = Values.Divide()
如有遗漏请指正,我在这里创建class库
Namespace calulation
Public Class Operations
Private i_v1 As Integer
Private i_v2 As Integer
Private obj_mul As Multiply
Private d_value As Double
Public ReadOnly Property Multiply As Double
Get
obj_mul = New Multiply(i_v1, i_v2)
d_value = obj_mul.GetValues
Return d_value
End Get
End Property
Private obj_divide As Divide
Public ReadOnly Property Divide As Double
Get
obj_divide = New Divide(i_v1, i_v2)
d_value = obj_divide.GetValues
Return d_value
End Get
End Property
Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)
i_v1 = v1
i_v2 = v2
End Sub
End Class
Public Class Multiply
Private Shared s_value1 As Integer
Private Shared s_value2 As Integer
Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)
s_value1 = v1
s_value2 = v2
End Sub
Public Function GetValues() As Double
Return s_value1 * s_value2
End Function
End Class
Public Class Divide
Private Shared s_value1 As Integer
Private Shared s_value2 As Integer
Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)
s_value1 = v1
s_value2 = v2
End Sub
Public Function GetValues() As Double
Try
Return s_value1 / s_value2
Catch ex As Exception
Throw ex
End Try
End Function
End Class
End Namespace
现在将该库的引用放入您的 windows 表单项目
Imports calculation.calulation
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Try
Dim obj As Double = New Operations(2, 3).Multiply
Dim obj2 As Double = New Operations(2, 3).Divide
MsgBox(obj.ToString)
MsgBox(obj2.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub