Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Validating on Overridable method
Message
De
07/09/2011 04:01:59
 
 
À
05/09/2011 16:30:29
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Versions des environnements
Environment:
VB 9.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01522449
Message ID:
01522868
Vues:
37
This message has been marked as a message which has helped to the initial question of the thread.
>Ok, I got this one working:
>
>
>        ' If a method exists in a sub class. This is used when we negotiate with the Overrides method. Thus, the framework
>        ' may know if the Overrides method exists in the sub class. This is used in the DataEntry class. So, if the method
>        ' does not exist, we do not call it. And, if it exists, it allows us to validate, if necessary, before proceeding.
>        ' expO1 Originator
>        ' expC1 Name of the method
>        Public Function IsMethodExistInSubClass(ByVal toOriginator As Object, ByVal tcMethod As String) As Boolean
>            Dim lcBaseClass As String = ""
>            Dim lcClass As String = ""
>            Dim llExist As Boolean = False
>            Dim loType As Type = Nothing
>            Dim loTypeParent As Type = Nothing
>            Dim loMethodInfo As System.Reflection.MethodInfo = Nothing
>
>            ' Get a reference to the originator type
>            loType = toOriginator.GetType()
>
>            ' Get a reference to the method
>            loMethodInfo = loType.GetMethod(tcMethod, System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.Public)
>
>            ' Get a reference to the same object as well so we can climb up the chain for comparism
>            loTypeParent = loType
>
>            ' Loop until we have reached the base class
>            While True
>
>                ' If we have reached the object class
>                If loTypeParent.Name = "Object" Then
>                    Exit While
>                Else
>
>                    ' Get the class name
>                    lcClass = loTypeParent.Name
>
>                    loTypeParent = loTypeParent.BaseType
>                End If
>
>            End While
>
>            ' Get the base class name
>            lcBaseClass = lcClass
>
>            ' If the method exists in the sub class
>            If loMethodInfo.DeclaringType.Name <> lcBaseClass Then
>                llExist = True
>            End If
>
>            Return llExist
>        End Function
>
>
>Not sure however if there is a way to simplify that.

Could be shorter (and safer):
Public Function IsDerivedMethod(o As Object, methodName As String) As Boolean
	Dim t As Type = o.[GetType]()
	Dim minfo As MethodInfo = t.GetMethod(methodName, BindingFlags.Instance Or BindingFlags.[Public])

	If minfo Is Nothing Then
		Throw New Exception("Method name does not exist")
	End If

	While t.BaseType <> GetType([Object])
		t = t.BaseType
	End While
	Return minfo.DeclaringType <> t
End Function
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform