2009-04-17 7 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-スキルがtehのが吸うているので、私は間違った用語を取得する場合、私を平手打ちしてくださいと(その順序プラザに)私にstraigthを設定します。

+0

私はいつもその派生クラスを知っているベースは常に悪いデザインの練習であると考えてきました。あなたがこれをしたいと思う唯一の方法は本当ですか? – bioskope

+0

私はそれが起こることを知っていました、そして、私はこれを行うためのより良い方法があると確信しています。私は自分の小さなORMツールで遊んでいる間にそれを使用しています。派生クラスの名前に基づいてデータベースについていくつかの仮定をしています。 – Kjensen

答えて

0

「時空の旅人は、」コメントに答えを書いた:私は、オーバーライド可能である必要はありません

と思います。ただし、多型であるMe.GetType()を使用し、DoMagixがOverridableとして設定されていない場合でも正しい型を取得する必要があります。

0

まず、DoMagixは「オーバーライド可能」である必要があります。

DoMagix内でGetType(Me)を使用すると、実行時にどのタイプであるかを知ることができます。

+6

私はOverridableは必要ではないと思います。ただし、多型であるMe.GetType()を使用し、DoMagixがOverridableとして設定されていない場合でも正しい型を取得する必要があります。 –

+0

ありがとうございます。私は自分自身を修正した。 – shahkalpesh

+0

これを答え、Timespace Travelerにする必要があります。 :) – Kjensen

0

希望私はこのトピックを "再できます"。私は子供の名前を返すために共有プロパティが必要であることを除いて、同様の問題に遭遇した。だから私...コンストラクトは動作しません。 私はこれが悪いデザインだと思っていますが、繰り返しコードの束を除いて、より良いアイデアはありませんでした... 私の目標はOPのものと非常に似ています... "A"をベースクラス'instancinatigなしのXStringプロパティ...?

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 

クラスの使用法(XDはXMLDocumentを...である):

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> 

ので、戻り値はXSTRINGがあるTRUE

する必要があります私は子供の中でシャドー/オーバーライドしようとしたので、保護されていません - 運がないので、実際のこのように関係はありません

+0

別の新しい質問を作成してください。あなたはまた、答えを得る可能性が非常に高いです。 :) – Kjensen

関連する問題