2009-04-17 29 views
1

In der folgenden Mock-up, wie finde ich heraus, wenn ich eine Instanz von FooDAL oder WeeDAL aus der Methode DoMagix() bin?Name der erbenden Klasse

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 

Meine OO-Fähigkeiten sind teh saugen, also wenn ich die Terminologie falsch, bitte schlage mich und stellen mir straigth (in dieser Reihenfolge plz).

+0

Nur eine Abfrage, ich habe immer gedacht, dass die Basis, die abgeleiteten Klassen kennen zu lernen, immer schlechte Design-Praxis war. Ist das wirklich die einzige Möglichkeit, dies zu tun? – bioskope

+0

Ich wusste, dass das kommen würde, und ich bin mir sicher, dass es einen besseren Weg gibt, dies zu tun. Ich verwende es, während ich mit meinem eigenen kleinen ORM-Tool herumspiele, und ich mache einige Annahmen über die Datenbank basierend auf dem Namen der abgeleiteten Klasse. – Kjensen

Antwort

0

„Zeit-Raum-Reisende“, schrieb die Antwort in einem Kommentar:

Ich denke Overridable nicht notwendig ist; Es sollte jedoch Me.GetType() verwenden, das polymorph ist und den richtigen Typ erhalten sollte, selbst wenn DoMagix nicht als Overridable gesetzt ist.

0

Zuerst sollte der DoMagix "Overridable" sein.

Und Sie können GetType (Me) in DoMagix verwenden, um zu wissen, welcher Typ es zur Laufzeit ist.

+6

Ich denke Overridable ist nicht notwendig; Es sollte jedoch Me.GetType() verwenden, das polymorph ist und den richtigen Typ erhalten sollte, selbst wenn DoMagix nicht als Overridable gesetzt ist. –

+0

Danke. Ich habe mich selbst korrigiert. – shahkalpesh

+0

Sie sollten dies eine Antwort zu geben, Timespace Traveller. :) – Kjensen

0

hoffe ich kann dieses Thema "reanimieren". Ich stieß auf ähnliches Problem, außer dass ich eine geteilte Eigenschaft benötige, um den Kindnamen zurückzugeben ... So funktioniert das Ich ... Konstrukt nicht. Ich weiß, das ist als schlechtes Design, aber ich hatte keine bessere Idee - außer einer Reihe von wiederholten Code ... Mein Ziel ist sehr ähnlich zu den OP's ... Wie bekomme ich das "A" in die Basisklasse 'XString Eigenschaft OHNE Instancinating ...? (xd ist ein 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 

Klasse Verbrauch:

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") 

Die correstonding XML

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

So ist der Rückgabewert sollte

xstring TRUE ist geschützt, weil ich versuchte, in dem Kind zu überschatten - kein Glück, also ist es wirklich ly nicht relevant auf diese Weise

+0

Bitte erstellen Sie eine neue, separate Frage. Sie werden auch viel eher eine Antwort bekommen. :) – Kjensen

Verwandte Themen