วิธีแปลจาก C# เป็น VB.net

สำหรับโครงการที่เขียนใน VB.net ฉันต้องการใช้คลาส PropertyChangeNotifier จาก บทความนี้ อย่างน้อยฉันก็อยากลองดูว่าจะช่วยได้ไหม

เนื่องจากคลาสดั้งเดิมเขียนด้วย C# ฉันจึงพยายามแปลคลาสนี้เป็น VB.net แต่มีฟังก์ชันหนึ่งที่ฉันไม่สามารถคอมไพล์ได้ และฉันไม่รู้ว่าทำไม บางทีคุณอาจช่วยได้

ฟังก์ชั่นดั้งเดิมใน C# คือ:

private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    PropertyChangeNotifier notifier = (PropertyChangeNotifier)d;
    if (notifier.ValueChanged != null)
        notifier.ValueChanged(notifier, EventArgs.Empty);
}

การแปลของฉัน (แก้ไขเล็กน้อย) (และการแปลอัตโนมัติของเว็บไซต์หลายแห่ง) คือ:

Private Shared Sub OnPropertyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
    Dim notifier As PropertyChangeNotifier

    notifier = TryCast(d, PropertyChangeNotifier)
    If (notifier Is Nothing) Then
        Exit Sub
    End If

    RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty)
End Sub

ถ้าฉันลบ RaiseEvent ที่คอมไพเลอร์บอกฉันว่า ValueChanged เป็นเหตุการณ์และไม่สามารถเรียกได้โดยตรง ฉันควรใช้ RaiseEvent แต่เมื่อฉันใช้ RaiseEvent คอมไพเลอร์บอกฉัน

'notifier' ไม่ได้ถูกประกาศ อาจไม่สามารถเข้าถึงได้เนื่องจากระดับการป้องกัน

แต่อย่างที่คุณเห็น notifier ได้รับการประกาศสองสามบรรทัด


person Nostromo    schedule 12.10.2019    source แหล่งที่มา
comment
เพียงเปลี่ยน RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty) เป็น RaiseEvent ValueChanged(notifier, EventArgs.Empty)   -  person Anu6is    schedule 12.10.2019
comment
ฉันอยู่ในฟังก์ชันคงที่ และเหตุการณ์ ValueChanged เป็นเหตุการณ์ที่ไม่คงที่ของคลาส PropertyChangeNotifier   -  person Nostromo    schedule 12.10.2019
comment
โอ้ พลาดเรื่องสถิตย์   -  person Anu6is    schedule 12.10.2019
comment
มีปลั๊กอิน Visual Studio ฟรีที่จะแปล C# เป็น VB.NET และแปลกลับ   -  person R.J. Dunnill    schedule 13.10.2019
comment
การแปลอัตโนมัติเหล่านี้รองรับเฉพาะส่วนโค้ดง่ายๆ เท่านั้น ใช้งานไม่ได้ที่นี่ ฉันได้ลองหลายส่วนแล้ว   -  person Nostromo    schedule 13.10.2019


คำตอบ (2)


ฉันพบวิธีแก้ปัญหาด้วยตัวเอง มันไม่ได้อธิบายข้อความแสดงข้อผิดพลาด แต่อย่างน้อยก็กำลังรวบรวมและหวังว่าจะใช้งานได้ในภายหลัง

ฉันเพิ่งเพิ่มสิ่งนี้ลงในชั้นเรียน:

Private Sub OnValueChanged(sender As Object, e As EventArgs)
    RaiseEvent ValueChanged(sender, e)
End Sub

จากนั้นแทนที่จะยกเหตุการณ์ขึ้นมาเองในฟังก์ชัน OnPropertyChanged ฉันเรียกขั้นตอนใหม่ของฉัน:

Private Shared Sub OnPropertyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
    Dim notifier As PropertyChangeNotifier

    notifier = TryCast(d, PropertyChangeNotifier)
    If (notifier Is Nothing) Then
        Exit Sub
    End If

    notifier.OnValueChanged(notifier, EventArgs.Empty)
End Sub
person Nostromo    schedule 12.10.2019
comment
คุณไม่ได้โพสต์รายละเอียดนี้ในคำถามของคุณ - person Oleg; 12.10.2019
comment
คำตอบด้วยตนเองที่เกี่ยวข้องกับแหล่งที่มาที่ไม่ได้โพสต์และไม่ได้กล่าวถึงในคำถามหลัก - person Oleg; 12.10.2019

person    schedule
comment
ทั้ง notifier.ValueChanged บอกว่าเป็นงานอีเว้นท์ไม่สามารถโทรโดยตรงได้ - person Nostromo; 12.10.2019
comment
Public Event ValueChanged As EventHandler' เป็นเหตุการณ์ และไม่สามารถเรียกได้โดยตรง ใช้คำสั่ง 'RaiseEvent' เพื่อยกระดับเหตุการณ์ - person Nostromo; 12.10.2019
comment
notifier.ValueChanged ใน if-statemant จะส่งข้อผิดพลาดนั้นออกไปแล้ว - person Nostromo; 12.10.2019