从另一个班级提高.net事件?

时间:2011-08-15 19:44:14

标签: .net vb.net events

我可以从另一个类中调用一个类中包含的共享事件吗?

例如:

logonclass.vb:处理登录逻辑并对数据库进行身份验证

logonmanager.vb:保持当前用户引用和一些登录和超时事件

Logon.vb:带有提交按钮的表单。

我想做这样的事情,但我不能让编译器同意它

If VerifyEntries() Then
        Try
            privLvl = LoginClass.AttemptLogin(txtUserName.Text, txtPassword.Text)
        Catch
        End Try
        If privLvl > 0 Then
            'RaiseEvent LoginClass.UserLoggedIn()
            'RaiseEvent LoginManager.UIdisplaychange(privLvl)
            Me.Close()
        End If

    End If

如果这不是将事物连接在一起的正确方法,请让我知道,这样我就可以学会不同的结构。在我的计划中,似乎我从我的logonclass到我的loginmanager类引发了许多额外的重复事件。然后loginmanager必须再次为主窗体提升它以查看更改事件。它让我想到,如果我公开分享事件并且可以从任何地方提升它们,那么它将减少我在代码中需要的事件数量以及它们在运行时飞来飞去的数量。

2 个答案:

答案 0 :(得分:9)

在C#中,“event”关键字生成私有委托成员对象。因此,只能为定义的类访问它。但是您可以公开一个将触发事件的公共方法,并且可以从外部访问此方法。 我认为在VB中是一样的。

答案 1 :(得分:3)

我将创建一个引发事件的Friend方法。改为调用该方法或在外部引发事件。

Class LoginClass

    Public Shared Event UserLoggedIn As EventHandler

    Friend Shared Sub OnUserLoggedIn(e As EventArgs)
        RaiseEvent UserLoggedIn(Me, e)
    End Sub
End Class