カスタム イベントを 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% 理解していないので、これを自分で修正するのに苦労しています。