2011-05-23 6 views
6

Lo sentimos, esta es una mezcla de C# y VB.NetCómo fijar AddressOf requiere una conversación relajada al error delegado

tengo una clase C# con con 2 delegados:

public delegate string GetSettingDelegate(string key); 
public event GetSettingDelegate GetSettingEvent; 

public delegate void SetSettingDelegate(string key, string value); 
public event SetSettingDelegate SetSettingEvent; 

En un VB clase I agregar controladores al evento:

AddHandler _gisCtrl.SetSettingEvent, AddressOf SetSetting 
AddHandler _gisCtrl.GetSettingEvent, AddressOf GetSetting 

Cuando tratar de eliminar los controladores:

RemoveHandler _gisCtrl.SetSettingEvent, AddressOf SetSetting 
RemoveHandler _gisCtrl.GetSettingEvent, AddressOf GetSetting 

SetSetting está bien, pero GetSetting lanza una advertencia:

La expresión AddressOf no tiene ningún efecto en este contexto porque los argumentos del método a AddressOf requiere una conversación relajada con el tipo delagate del evento.

Éstos son los métodos

Private Sub SetSetting(ByVal key As String, ByVal value As String) 
    KernMobileBusinessLayer.[Global].Settings.SetValue(key, value) 
End Sub 

Private Function GetSetting(ByVal key As String) 
    Return KernMobileBusinessLayer.[Global].Settings.GetString(key) 
End Function 

alguna idea de cómo solucionar este problema y por qué se lanza en el primer lugar? Los 2 delegados/eventos/métodos se ven lo suficientemente similares que no sé por qué uno está bien y uno lanza una advertencia.

+0

GetSetting(), como se definió anteriormente, devolvería Object, no String. Creo que Max tiene razón. – rskar

+3

Use Option Strict On para permitir que el compilador detecte este tipo de errores. –

Respuesta

14

probablemente su función GetSetting debe coincidir plenamente GetSettingDelegate firma:

Private Function GetSetting(ByVal key As String) as String 
+0

Gracias. Obvio ahora! Marqué la tuya como respuesta, ya que primero respondiste. –

6

su código VB:

Private Function GetSetting(ByVal key As String) 

no coincide con la definición de C# delegado:

public delegate string GetSettingDelegate(string key); 

que debiera especifique un tipo de devolución en su implementación de VB, como este:

Private Function GetSetting(ByVal key As String) As String 
Cuestiones relacionadas