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

后端 未结 7 1684
后悔当初
后悔当初 2020-12-09 14:53

I am trying to create a class in VB.NET which inherits a base abstract class and also implements an interface. The interface declares a string property called Description. T

相关标签:
7条回答
  • 2020-12-09 15:46

    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.

    0 讨论(0)
提交回复
热议问题