VB.NET class inherits a base class and implements an interface issue (works in C#)

You need to mark your property as Overridable or MustOverride in the base class and then you can override it in the child class:

Public MustInherit Class FooBase
    Private _Description As String
    Public Overridable Property Description() As String
        Get
            Return _Description
        End Get
        Set(ByVal value As String)
            _Description = value
        End Set
    End Property
End Class

Public Class MyFoo
    Inherits FooBase
    Implements IFoo
    Public Overrides Property Description() As String Implements IFoo.Description
        Get
            Return MyBase.Description
        End Get
        Set(ByVal value As String)
            MyBase.Description = value
        End Set
    End Property
End Class

Edit
This is in response to what @M.A. Hanin posted. Both of our solutions work but its important to understand the ramifications of each. Imagine the following code:

Dim X As FooBase = New MyFoo()
Trace.WriteLine(X.Description)

What comes out of the X.Description? Using the Overridable you’ll get the call to the child class while using the Overload method you’ll get the call to the base class. Neither is right or wrong, its just important to understand the consequences of the declaration. Using the Overload method you have to up-cast to get the child’s implementation:

Trace.WriteLine(DirectCast(X, MyFoo).Description)

If you’re just calling MyBase.Description from the child class the question is moot but if you ever change the definition of the child class then you just need to make sure you understand what’s going on.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)