Vb.net 静态类的事件处理

Vb.net 静态类的事件处理,vb.net,static,event-handling,Vb.net,Static,Event Handling,我对VB.NET中的事件基础知识有问题。我想有一个静态类,但在VB.NET中它不存在,等价物是模块。所以我有一个模块,里面有一些属性(当然是静态的)。例如: Public Module MyModule Private _value As Integer Public Event ValueChanged() Public Property Value() As Integer Get Return _value End Get

我对VB.NET中的事件基础知识有问题。我想有一个静态类,但在VB.NET中它不存在,等价物是
模块
。所以我有一个模块,里面有一些属性(当然是静态的)。例如:

Public Module MyModule

   Private _value As Integer
   Public Event ValueChanged()

   Public Property Value() As Integer
      Get
         Return _value
      End Get
      Set(ByVal value As Integer)
         _value = value
         RaiseEvent ValueChanged()
      End Set
   End Property

End Module
在我的情况下,我想处理更改的
\u值
。这个代码应该可以。但如果我想在另一个类中处理它:

Public Class MyClass

   Public Sub Method_ValueChanged() Handles MyModule.ValueChaged
        'Do something...
   End Sub

End Class

这里有一个问题,因为MyModule必须用events声明为
,但MyModule是静态的,所以不能这样做。您能告诉我如何处理来自另一个类的静态类事件吗?谢谢。

您必须使用
AddHandler

例如:

Module A
    Private _value As Integer
    Public Event ValueChanged()

    Public Property Value() As Integer
    Get
        Return _value
    End Get
    Set(ByVal value As Integer)
        _value = value
        RaiseEvent ValueChanged()
    End Set
    End Property
End Module

Module B
    Sub Main
        AddHandler ValueChanged, AddressOf Method_ValueChanged
        A.Value = 12
    End Sub

    Public Sub Method_ValueChanged()
        Console.WriteLine("Changed!")
    End Sub
End Module

运行此命令将打印
更改是静态的。模块类似于C#中的静态类,但您不需要模块来定义共享方法或字段。很抱歉,通常我在C#中工作……为了得到类似于vb.net中静态类的东西,我建议使用私有构造函数创建一个不可继承的类,并且只使用共享函数。@SilvioMarcovic:您也可以使用模块。这也是一个不可继承的类,您不能仅使用共享成员来建立它。对扩展方法来说,这也是必须的。是的,关于使用什么,有很多讨论。模块或静态类。我想两种选择都可以。除了你提到的扩展。大多数情况下,c#到vb.net转换器将静态类转换为不可继承类。