覆盖继承类中的默认属性值

时间:2012-12-13 19:20:56

标签: .net vb.net oop

假设我定义了以下父类:

Public Class Parent

    Public Property Prop1 As String = "MyDB1"

End Class

我希望继承它,但希望该属性为子类具有不同的值。

我想我可以这样做:

Public Class Child
    Inherits Parent

    Public Sub New()
        MyBase.New()
        MyBase.Prop1 = "MyDB2"
    End Sub

End Class

但是我想知道这是否是最好的方法,或者是否有类似Overridable属性的东西,或者如果这只是一个糟糕的编程习惯呢?

谢谢!

2 个答案:

答案 0 :(得分:2)

在c#中,为了让属性可以覆盖,你可以将类成员标记为virtual,并将此关键字的vb.net equvale标记为Overridable

public virtual int MyProperty {get;set;}

这个属性可以在子类中重写,如下所示:

 public override int MyProperty {
  get{ 
         //return some other thing
     }
  } 

相当于Vb.NET:

在超级课程中:

 Public Overridable Property MyProperty As Integer
        Get

        End Get

        Set

        End Set

    End Property

并在子类中:

  Public Overrides Property MyProperty As Integer
        Get
                //return some other thing
        End Get

    End Property

答案 1 :(得分:2)

根据您的评论,我的意见如下:

  • 如果您控制基类,如果其目的是根据派生类型的业务规则更改值,则将其设为Overridable
  • 如果您不能控制基类,并且需要“覆盖”该属性,则可以“隐藏”基本属性;在C#中,它看起来像new public int MyProperty { ... },但我不确定这是如何在VB中完成的
  • 如果您需要的只是财产返回不同的值,那么您所做的似乎很好