Question

  

Possible en double:    détecter si une méthode a été remplacée en utilisant la réflexion (C #)

Yat-il un moyen de savoir si une méthode est une dérogation? Pour par exemple.

public class Foo
{
    public virtual void DoSomething() {}
    public virtual int GimmeIntPleez() { return 0; }
}

public class BabyFoo: Foo
{
    public override int GimmeIntPleez() { return -1; }
}

Est-il possible de réfléchir sur BabyFoo et dire si GimmeIntPleez est un remplacement?

Était-ce utile?

La solution

Vous pouvez utiliser MethodInfo.DeclaringType pour déterminer si le procédé est une valeur de remplacement (en supposant qu'il est également IsVirtual = true).

De la documentation:

  

... Notez que lorsque B virtuel overrides   Procédé M de A, il essentiellement   redéfinit (ou redéclare) cette méthode.   Par conséquent, B.M est des rapports MethodInfo   le type déclarant que B plutôt que A,   même si A est où cette méthode a été   initialement déclarée ...

Voici un exemple:

var someType = typeof(BabyFoo);
var mi = someType.GetMethod("GimmeIntPleez");
// assuming we know GimmeIntPleez is in a base class, it must be overriden
if( mi.IsVirtual && mi.DeclaringType == typeof(BabyFoo) )
    { ... }

Autres conseils

Test contre MethodInfo.GetBaseDefinition(). Si la fonction est une dérogation, il retournera une autre méthode dans une classe de base. Si ce n'est pas, le même objet de la méthode sera retourné.

  

En cas de substitution dans une classe dérivée, retourne l'objet MethodInfo pour la méthode de la classe de base directe ou indirecte, dans lequel le procédé représenté par cette instance a été déclarée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top