2012-12-13 73 views
1

假設我有以下父類中定義一個覆蓋默認屬性值:在繼承的類

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 

但我在想,如果這是爲了做到這一點,最好的辦法,或者如果有像可重寫的屬性或者這僅僅是不好的編程習慣作爲一個整體?

謝謝!

+1

也許我錯過了這個問題的重點,但你有沒有嘗試過讓屬性Overridable? – sellmeadog

+0

如何在兒童課程中重新申報該物業? 'Public Property Prop1 =「MyDB2」'(首先使用Overridable a la @sellmeadog) – DWright

+0

謝謝,@sellmeadog ...我只是這樣做,它似乎也工作得很好! - 我想我的問題是,這是好還是壞,還是與我所做的不同?我仍然在努力學習OOP的最佳編程實踐。謝謝! –

回答

2

基於您的評論,這是我的意見:

  • 如果你是在基類的控制,使其Overridable如果意圖是它是基於業務規則的值更改爲有(S)派生類型
  • 如果您不控制基類,並且需要「覆蓋」屬性,則可以「隱藏」基本屬性;在C#中,它看起來像new public int MyProperty { ... },但我不知道這是如何實現的VB
  • 如果你需要的是屬性返回不同的值,那麼你做了什麼似乎罰款
+0

謝謝! - 說得通!! –

2

in c#for letting property is overridable you can mark class member as virtual and vb.net equvale of this keyword is Overridable

public virtual int MyProperty {get;set;} 

這個屬性可以在子類中overrided這樣的:

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 
+0

非常感謝Behnam,非常有意義,並感謝代碼示例! - 我只是沒有將您標記爲解決方案(儘管它完全正確),因爲@sellmeadog更快提供瞭解決方案。非常感謝,但! –

+0

@JohnBus​​tos謝謝!但我比sellmeadog.anyway早8分鐘... :) –

+0

您的解決方案,是的,但我們已經通過評論來討論它...對不起,男人,我只是想公平地對待他:) –