2009-04-17 43 views
1

在下面的模型中,如果我是方法DoMagix()中的FooDAL或WeeDAL的實例,我該如何發現?獲取繼承類的名稱

Public MustInherit Class DataAccessClass 
    Public Sub DoMagix() 
     '** LOOK AT ME!!! ** 
     'Who am I? Why am I here? Where am I going? 
     '** /LOOK AT ME!!! ** 
    End Sub 
End Class 

Public Class FooDAL 
    Inherits DataAccessClass 
End Class 

Public Class WeeDAL 
    Inherits DataAccessClass 
End Class 

我的OO-技能是德吸吮,所以如果我得到的術語錯誤,請打我,把我straigth(按順序PLZ)。

+0

只是一個查詢,我一直認爲基礎知道它的派生類總是不好的設計實踐。那麼這真的是你希望這樣做的唯一方式嗎? – bioskope 2009-04-17 22:43:12

+0

我知道會出現,我相信有這樣做的更好方法。我在使用自己的小ORM工具時使用它,並且根據派生類的名稱對數據庫做出了一些假設。 – Kjensen 2009-04-18 10:23:01

回答

0

「時空旅行者」寫的答案在註釋:

我認爲可覆蓋是沒有必要的;但是,它應該使用Me.GetType(),它是多態的,即使DoMagix未設置爲Overridable,也應該獲得正確的類型。

0

首先DoMagix應該是「Overridable」。

而且您可以使用DoMagix中的GetType(Me)來了解它在運行時的類型。

+6

我認爲Overridable沒有必要;但是,它應該使用Me.GetType(),它是多態的,即使DoMagix未設置爲Overridable,也應該獲得正確的類型。 – 2009-04-17 22:26:27

0

希望我能「復活」這個話題。我遇到了類似的問題,除了我需要一個共享屬性來返回子名稱...所以我......構造不起作用。 我知道,這被認爲是不好的設計,但我沒有更好的主意 - 除了一堆重複的代碼... 我的目標是非常類似於OP的一個...如何獲得「A」基類'XString屬性沒有instancinatig ...? (XD是爲XMLDocument ...)

Public MustInherit Class MinMax 

    Protected Shared Property XString As String = ??? 

    Public Shared Function isValid(value As String) As Boolean 
     Return min <= value <= max 
    End Function 

    Private Shared ReadOnly Property min As Double 
     Get 
      Return xd.SelectSingleNode(String.Format("FOEB/Restrictions/{0}", XString)).InnerText.Split("..")(0) 
     End Get 
    End Property 
    Private Shared ReadOnly Property max As Double 
     Get 
      Return xd.SelectSingleNode(String.Format("FOEB/Restrictions/{0}", XString)).InnerText.Split("..")(1) 
     End Get 
    End Property 
End Class 

類用法:

Public Class Restrictions 
    Public Class A 
     Inherits MinMax 
    End Class 
    Public Class B 
     Inherits MinMax 
    End Class 

End Class 


dim isOk as Boolean= Restrictions.A.isValid("10") 

的correstonding XML

<?xml version="1.0" encoding="utf-8" ?> 
<FOEB> 
    <Restrictions> 
    <A>1..21</A> 
    </Restrictions> 
</FOEB> 

因此,返回值應爲TRUE

Xstring是受保護,因爲我試圖在孩子身上隱藏/重寫 - 沒有運氣,所以這是真實的與此無關