2015-06-29 30 views
-1

我想爲.NET 4編碼一個庫,並重新編譯爲使用.NET 3.5客戶端。該庫可在https://github.com/cshivers/IrcClient-csharp/tree/master/IrcClient-csharp爲.NET 4寫的代碼返回錯誤對於.NET 3.5客戶端

這是我的程序中的代碼塊在外部庫中調用Irc.ChannelMessage時發生錯誤。

Private Sub irc_ChannelMessage(Channel As String, User As String, Message As String) Handles irc.ChannelMessage 
     rtbOutput.Clear() 
     rtbOutput.Text = Message 
     If rtbOutput.Text.StartsWith("!Listen ") Then 
      Dim s As String = rtbOutput.Text 
      Dim pars As New List(Of String)(s.Split(" "c)) 

      CheckParams(pars) 
     End If 
    End Sub 

圖書館適用於我的程序時,它被設置爲使用.NET 4中,但是當我將它設置爲使用的.Net 3.5客戶端返回下面

錯誤4方法「私人的錯誤Sub irc_ChannelMessage(Channel As String,User As String,Message As String)''無法處理事件'Public Event ChannelMessage'(sender As Object,e As TechLifeForum.ChannelMessageEventArgs)'',因爲它們沒有 兼容簽名。

看來,一旦我編譯爲.NET 3.5 IrcClient.cs無法將其轉化爲EventArguments.cs正確...

在IrcClient.cs我們呼籲

public event EventHandler<ChannelMessageEventArgs> ChannelMessage = delegate { }; 

而且應該然後從EventArguments.cs調用此:

public class ChannelMessageEventArgs : EventArgs 
    { 
     public string Channel { get; internal set; } 
     public string From { get; internal set; } 
     public string Message { get; internal set; } 
     public ChannelMessageEventArgs(string Channel, string From, string Message) 
     { 
      this.Channel = Channel; 
      this.From = From; 
      this.Message = Message; 
     } 
    } 

但是它只能工作在.NET 4中的任何想法?

+1

爲什麼不修改irc_ChannelMessage以具有兼容的簽名。 – usr

+0

@USR,因爲我需要IRC信息EventArgs將放棄,而不是事件參數調用 – Melona380

+0

正如我所說的,代碼在.Net 4中運行正常,但是當切換到.NET 3.5時,此錯誤開始 – Melona380

回答

2

設置事件處理函數(Handles關鍵字)時,方法的簽名(換句話說,傳遞給方法的變量)必須與事件的簽名匹配。

你的事件的簽名是(C#):

EventHandler<ChannelMessageEventArgs> ChannelMessage 

(vb.net):

EventHandler(EventArgs as ChannelMessageEventArgs) 

您錯誤地試圖處理具有以下簽名本次活動:

irc_ChannelMessage(Channel As String, User As String, Message As String) 

這三個變量都包含在ChannelMessageEventArgs類中,並且一起傳遞,因此可以查看將您的事件處理方法更改爲:

Private Sub irc_ChannelMessage(EventArgs As ChannelMessageEventArgs) Handles irc.ChannelMessage 
    rtbOutput.Clear() 
    rtbOutput.Text = EventArgs.Message 
    If rtbOutput.Text.StartsWith("!Listen ") Then 
     Dim s As String = rtbOutput.Text 
     Dim pars As New List(Of String)(s.Split(" "c)) 

     CheckParams(pars) 
    End If 
End Sub 
+0

謝謝這工作 – Melona380

相關問題