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.