Vb.net 在对象中引发的事件是否也在同一类的单独对象中激发?

Vb.net 在对象中引发的事件是否也在同一类的单独对象中激发?,vb.net,events,event-handling,Vb.net,Events,Event Handling,VB NET 2010,框架3.5 试着去理解为什么会这样。我从同一个类创建了两个对象GlobalClass1具有全局范围,而LocalClass1具有模块范围 在UControl的加载事件中,我从此时开始设置LocalClass1=GlobalClass1,每当我更改GlobalClass1.TestProperty的值时,属性值也会在LocalClass1中更新。LocalClass1中的事件在GlobalClass1事件触发时触发 这就是我想要的结果=>能够在其他几个类模块和用户控件中触发

VB NET 2010,框架3.5

试着去理解为什么会这样。我从同一个类创建了两个对象
GlobalClass1
具有全局范围,而
LocalClass1
具有模块范围

在UControl的加载事件中,我从此时开始设置
LocalClass1=GlobalClass1
,每当我更改
GlobalClass1.TestProperty的值时,属性值也会在
LocalClass1
中更新。LocalClass1中的事件在GlobalClass1事件触发时触发

这就是我想要的结果=>能够在其他几个类模块和用户控件中触发全局对象的事件

我不太明白为什么简单地设置Local Object=Global Object会导致局部对象在全局对象属性更新时自动更新其属性值,或者为什么在全局对象引发事件时会自动触发局部事件

Module Module1
    Public WithEvents frm As New MainForm
    Public WithEvents GlobalClass1 As New Class1
    Public Sub Main()
        frm.Init()
       frm.ShowDialog()
   End Sub
End Module




类实例(对象)都引用堆上分配给它们的相同内存空间。

注释:

这行代码有问题:
LocalClass1=GlobalClass1

它们一开始是不同的对象,但后来你让它们指向同一个对象。对象引用或引用类型的工作方式不同于值类型,如整数:

Dim x As Int32
Dim y As Int32 = 42

x = y
作为值类型,y的值被指定给x。引用类型本质上是指针的包装器或别名。因此,您的分配代码将原来指向
New Class1
的指针替换为已分配给
GlobalClass1


在MSDN上阅读更多信息

您使用
LocalClass1=GlobalClass1
将它们设置为相同的对象引用。它们一开始是不同的东西,但这一行的变化使它们与LocalClass1=GlobalClass1相同(对象引用)。这仅适用于类或对象?我用两个整数变量添加了相同的逻辑,当然它的行为不一样。全局整数是递增的,并且与局部整数没有任何变化。例如,整数变量是一种值类型,因此
x=y
只是将y的值赋给x。在上面的例子中,它们是等同于指针的引用类型,所以这条线使它们指向同一个对象。见MSDN
Public Class UControl
    Private WithEvents LocalClass1 As New Class1
    Private Sub UControl_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        LocalClass1 = GlobalClass1
    End Sub
    Private Sub LocalClass1_TestPropertyChanged() Handles LocalClass1.TestEvent
        Me.TextBox1.Text = LocalClass1.TestProperty  'This Event fires when events are raised in the other object => GlobalClass1??
    End Sub
End Class
Public Class Class1
    Public Event TestEvent()

    Private _testProperty As String
    Public Property TestProperty() As String
        Get
            Return _testProperty
        End Get
        Set(ByVal value As String)
            _testProperty = value
            RaiseEvent TestEvent()
        End Set
    End Property
End Class
Dim x As Int32
Dim y As Int32 = 42

x = y