gpt4 book ai didi

c# - 自定义事件转换 vb.net 到 c#

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:57 25 4
gpt4 key购买 nike

我在将自定义事件从 vb.net 转换为 c# 时遇到了一些问题,我真的没有 vb.net 的经验,而且我对这些自定义事件的经验更少,应用程序的其余部分是在没有很多问题,但是这个问题让我陷入困境。我使用过的转换器(付费的和免费的)都无法生成可用的代码。

VB.net 代码:

<NonSerialized()> Private _objNonSerializablePropertyChangedHandlers As New System.ComponentModel.EventHandlerList

'''' <summary>
'''' Raised when a public property of this object is set.
'''' </summary>
Public Custom Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
AddHandler(ByVal value As PropertyChangedEventHandler)
Me.NonSerializablePropertyChangedHandlers.AddHandler(STR_PROPERTYCHANGEDEVENT, value)
End AddHandler
RemoveHandler(ByVal value As PropertyChangedEventHandler)
Me.NonSerializablePropertyChangedHandlers.RemoveHandler(STR_PROPERTYCHANGEDEVENT, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As PropertyChangedEventArgs)

Dim obj As PropertyChangedEventHandler = TryCast(Me.NonSerializablePropertyChangedHandlers(STR_PROPERTYCHANGEDEVENT), PropertyChangedEventHandler)

If obj IsNot Nothing Then
obj.Invoke(sender, e)
End If

End RaiseEvent

我用 C# 制作的最好的作品如下:

C#

[NonSerialized()]
private System.ComponentModel.EventHandlerList _objNonSerializablePropertyChangedHandlers = new System.ComponentModel.EventHandlerList();

public event PropertyChangedEventHandler PropertyChanged
{
add
{
this.NonSerializablePropertyChangedHandlers.AddHandler(STR_PROPERTYCHANGEDEVENT, value);
}
remove
{
this.NonSerializablePropertyChangedHandlers.RemoveHandler(STR_PROPERTYCHANGEDEVENT, value);
}
}

protected void OnPropertyChanged(string strPropertyName)
{
EventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler.Invoke(this, new PropertyChangedEventArgs(strPropertyName));
//PropertyChanged(this, new PropertyChangedEventArgs(strPropertyName));
}
}

但是这会引发错误“事件‘CardBase.PropertyChanged’只能出现在 += 或 -= 的左侧

线上:EventHandler handler = this.PropertyChanged;

由于我不是 100% 了解上面的代码在做什么,我正在努力自己解决这个问题,如果有人可以帮助解决这个问题,我将不胜感激。

最佳答案

更改此代码

protected void OnPropertyChanged(string strPropertyName)
{
EventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler.Invoke(this, new PropertyChangedEventArgs(strPropertyName));
}
}

protected void OnPropertyChanged(string strPropertyName)
{
var handler =
this.NonSerializablePropertyChangedHandlers[STR_PROPERTYCHANGEDEVENT]
as EventHandler;

if (handler != null)
{
handler(this, new PropertyChangedEventArgs(strPropertyName));
}
}

引用 -event- can only appear on the left hand side of += or -=

关于c# - 自定义事件转换 vb.net 到 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17022061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com