为.NET 4编写的代码返回.NET 3.5客户端错误
本文关键字:NET 错误 返回 客户端 代码 | 更新日期: 2023-09-27 18:00:18
我正在尝试获取一个为.NET 4编码的库,并重新编译它以使用.NET 3.5客户端。图书馆位于https://github.com/cshivers/IrcClient-csharp/tree/master/IrcClient-csharp
这是我的程序中的代码块,在外部库中调用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方法"Private Sub-irc_ChannelMessage(通道为字符串,用户作为字符串,消息作为字符串)"无法处理事件"公共事件ChannelMessage(发送方为对象,e为TechLifeForum.ChannelMessageEventArgs)',因为它们没有兼容签名。
似乎一旦我为.NET 3.5编译了它,IrcClient.cs就无法正确地将其转换为EventArguments.cs。。。
在IrcClient.cs中我们正在呼叫
public event EventHandler<ChannelMessageEventArgs> ChannelMessage = delegate { };
然后应该从EventArguments.cs:调用This
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中工作,有什么想法吗?
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