0

我已经为此苦苦挣扎了好几个小时。希望你们中的一些 vb.net 大师可以帮助我恢复理智。

场景:我有一个对象 (mqtt_client),它公开了我需要捕获和处理的连接/断开连接事件。我需要可以从我的代码中的多个子/函数/模块访问该对象。所以我在封闭类中但在代码块之外将其声明为 Public。

如果我像这样在主子之外声明它:

Public mqtt_client = New MqttFactory().CreateManagedMqttClient
Public Sub Ruptela_Server(sender As Object, e As EventArgs) Handles MyBase.Load

    ' Add Event Handlers for Connected and disconnected events
    AddHandler mqtt_client.Disconnected, AddressOf MQTTclient_disconnected_handler
    AddHandler mqtt_client.Connected, AddressOf MQTTclient_connected_handler

addhandler 失败,因为 mqtt_client 没有公开事件,我不知道为什么。

但是,如果我这样做:

 Public Sub Ruptela_Server(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim mqtt_client = New MqttFactory().CreateManagedMqttClient
    ' Add Event Handlers for Connected and disconnected events
    AddHandler mqtt_client.Disconnected, AddressOf MQTTclient_disconnected_handler
    AddHandler mqtt_client.Connected, AddressOf MQTTclient_connected_handler

然后 addhandlers 很好地连接起来,但是该对象仅在 sub 内部具有范围,并且不能从不同的模块访问。

我不能将所有这些代码放在封闭块之外,因为 addhandler 是一种方法并且不会在那里工作。

我该怎么办?任何指导将不胜感激。

4

2 回答 2

0

@瑞恩谢谢。我之前曾尝试键入 mqtt_client AS ManagedClient ,但它失败了,但你的回答让我坚持了下来。缺少的部分是我没有深入研究,Intellisense 没有帮助我:

公共 mqtt_client As ManagedClient = New MqttFactory().CreateManagedMqttClient

代替

Public mqtt_client As MQTTnet.ManagedClient.ManagedMqttClient = New MqttFactory().CreateManagedMqttClient

感谢您提供有关检查 Option Infer 的提示。

谢谢指点!

于 2018-03-09T20:19:43.293 回答
0

Type inference only works for local variables, so while this gives mqtt_client the type of .CreateManagedMqttClient with Option Infer On:

Public Sub Ruptela_Server(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim mqtt_client = New MqttFactory().CreateManagedMqttClient

this gives it the type Object:

Public mqtt_client = New MqttFactory().CreateManagedMqttClient

Public Sub Ruptela_Server(sender As Object, e As EventArgs) Handles MyBase.Load

Specify an explicit type for the field with As, and enable Option Explicit at the project level to avoid future problems. (Option Explicit and Option Strict should always be on for all source.)

于 2018-03-09T19:50:20.383 回答