簡體   English   中英

將C#流利接口轉換為VB.NET中的代碼

[英]Converting C# fluent interface to code in VB.NET

我有以下C#代碼,正嘗試將其轉換為VB.NET。 我也想用回調替換“ Console.WriteLine”。

我認為並希望我能夠在某種程度上進行轉換:

nInteractorsAgent
    .AddInteractorFor(currentWindowBounds, Literals.RootId, 0, currentWindowHandle.ToString(), "MyFirstActivatable")
    .WithActivatable()
    .HasActivationFocus(id => Console.WriteLine("Id: {0} got activation focus.", id))
    .SetTentativeFocusEnabled(true)
    .HasTentativeFocus(id => Console.WriteLine("Id: {0} got tentative activation focus.", id))
    .WhenFocusChanged((id, hasTentativeFocus, hasActivationFocus) => { })
    .LostFocus(id => Console.WriteLine("Id: {0} lost focus.", id))
    .WhenActivated(id => Console.WriteLine("Id: {0} activated", id));

我在VB.NET中的方法是:

Dim v1 As VirtualInteractor = nInteractorsAgent.AddInteractorFor(currentWindowBounds, Literals.RootId, 0, "0", "MyFirstActivatable").WithActivatable().HasActivationFocus(Sub() HasActivationFocus(v1.Id)).SetTentativeFocusEnabled(True).HasTentativeFocus(Sub() HasTentativeFocus(v1.Id)).WhenFocusChanged(Sub() WhenFocusChanged(v1.Id, False, False)).LostFocus(Sub() LostFocus(v1.Id)).WhenActivated(Sub() WhenActivated(v1.Id))

Public Shared Sub HasActivationFocus(ByVal id As String)

End Sub
Public Shared Sub HasTentativeFocus(ByVal id As String)

End Sub
Public Shared Sub WhenFocusChanged(ByVal id As String, ByVal hasTentativeFocus As Boolean, ByVal hasActivationFocus As Boolean)

End Sub
Public Shared Sub WhenFocusChanged()

End Sub
Public Shared Sub LostFocus(ByVal id As String)

End Sub
Public Shared Sub WhenActivated(ByVal id As String)

End Sub

但是,編譯器告訴我有關某些問題

.WhenFocusChanged(Sub() WhenFocusChanged(v1.Id, False, False))

.WhenActivated(Sub() WhenActivated(v1.Id))

編譯器告訴我,WhenFocusChanged沒有版本。 聲明如下:

    <Extension>
    Public Shared Function WhenFocusChanged(behaviors As IEnumerable(Of ActivatableBehavior), action As ActivationFocusChangedCallback) As IEnumerable(Of ActivatableBehavior)
    <Extension>
    Public Shared Function WhenFocusChanged(behavior As ActivatableBehavior, action As ActivationFocusChangedCallback) As ActivatableBehavior

有人可以告訴我我在這里做錯了什么以及如何正確地做嗎? 在這種情況下,我不知道除了給定的信息外,哪些信息對讀者也很重要。

謝謝。

那不會像原始代碼那樣工作。 您需要混合使用lambda委托 這是vb.net中類似內容的快速示例。

Module Module1

    Sub Main()

        Dim o As New Test

        o.DoSomething(Sub(paramName) Console.WriteLine("The id is {0}", paramName))

    End Sub

End Module

Class Test

    Public Property ID As Integer = 10

    Delegate Sub SomeDelegate(ByVal id As Integer)

    Public Function DoSomething(ByVal f As SomeDelegate) As Test

        f(Me.ID)

        Return Me
    End Function

End Class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM