VB Migration Partner

KNOWLEDGE BASE - Language


Previous | Index | Next 

[INFO] Default methods with arguments are converted to read-only properties

VB.NET doesn’t support default fields, default methods, and default properties with zero arguments, therefore VB Migration Partner can’t emit the Default attribute when it converts either a field or a parameterless property. However, when converting a class that exposes a default method with one or more arguments, VB Migration Partner attempts to preserve the “defaultness” of that method by converting it to a readonly property. For example, consider this code inside a class named Widgets:

        ' the Item method is the default member of the Widget class
        Public Function Item(ByVal index As Long) As Widget
            Set Item = m_Items(index)
        End Function

This is how VB Migration Partner converts it:

        Default Public ReadOnly Property Item(ByVal index As Long) As Widget
            Get
                Return m_Items(index)
            End Get
        End Property

In virtually all cases this substitution has no effect on the way the Item member is used, with one exception: you can invoke a method and discard its return value, but you can’t do the same with a readonly property. For example, consider the following code:

        Dim widgets As New Widgets
        ... 
        Function Exists(ByVal index As Integer) As Boolean
            On Error Resume Next
            widgets.Item(index)
            ' return True if no error (i.e. the item exists)
            Exists = (Err = 0)
        End Function

After the migration to VB.NET the reference to the Item member causes the following compilation error:

        Property access must assign to the property or use its value.

The fix is simple, though. You just need to modify the original VB6 code so that the return value is assigned to a temporary value:

        Function Exists(ByVal index As Integer) As Boolean
            On Error Resume Next
            Dim tmp As VariantSet tmp = widgets.Item(index)
            ' return True if no error (i.e. the item exists)
            Exists = (Err = 0)
        End Function
Previous | Index | Next 




Follow Francesco Balena on VB6 migration’s group on

LinkedIn





Read Microsoft Corp’s official case study of a VB6 conversion using VB Migration Partner.




Code Architects and its partners offers remote and onsite migration services.

More details




Subscribe to our free newsletter for useful VB6 migration tips and techniques.

newsletter



To learn more about your VB6 applications, run VB6 Analyzer on your source code and send us the generated text file. You will receive a detailed report about your VB6 applications and how VB Migration Partner can help you to quickly and effectively migrate it to .NET.

Get free advice



A fully-working, time-limited Trial Edition of VB Migration Partner allows you to test it against your actual code

Get the Trial




The price of VB Migration Partner depends on the size of the VB6 application, the type of license, and other factors

Request a quote




Migrating a VB6 application in 10 easy steps

Comparing VB Migration Partner with Upgrade Wizard

Migration tools: Feature Comparison Table

All whitepapers