开发者

Test if a method is an override? [duplicate]

开发者 https://www.devze.com 2023-01-04 04:47 出处:网络
This question already has answers here: Closed 12 years ago. Possible Duplicate: Detect if a method was overridden usi开发者_C百科ng Reflection (C#)
This question already has answers here: Closed 12 years ago.

Possible Duplicate:

Detect if a method was overridden usi开发者_C百科ng Reflection (C#)

Is there a way to tell if a method is an override? For e.g.

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

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

Is it possible to reflect on BabyFoo and tell if GimmeIntPleez is an override?


Test against MethodInfo.GetBaseDefinition(). If the function is an override, it will return a different method in a base class. If it's not, the same method object will be returned.

When overridden in a derived class, returns the MethodInfo object for the method on the direct or indirect base class in which the method represented by this instance was first declared.


You can use MethodInfo.DeclaringType to determine if the method is an override (assuming that it's also IsVirtual = true).

From the documentation:

...note that when B overrides virtual method M from A, it essentially redefines (or redeclares) this method. Therefore, B.M's MethodInfo reports the declaring type as B rather than A, even though A is where this method was originally declared...

Here's an example:

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) )
    { ... }
0

精彩评论

暂无评论...
验证码 换一张
取 消