无法使用GetMethod找到私有void泛型函数

时间:2016-07-28 12:21:00

标签: c# reflection

我有一个带有以下签名的函数:

private void Foo<TPoco>(IContext context, List<TPoco> pocos, DateTime modifiedDateTime)
    where TPoco : MyAbstractClass

我在GetMethods()中找不到这个功能。

根据这篇SO帖子(GetMethod for generic method),我尝试了这些绑定标志:

GetType().GetMethods(BindingFlags.Public 
    | BindingFlags.NonPublic 
    | BindingFlags.Instance 
    | BindingFlags.Static 
    | BindingFlags.FlattenHierarchy
)

这会在类中找到14个其他方法,但不会发现这个方法。它 找到这个方法:

protected void Bar<TContext, TPoco>(List<TPoco> pocosToPersist, TContext context)
    where TContext : IContext, new()
    where TPoco : MyAbstractClass

所以唯一的区别是访问级别 - 但后来我可以看到其他私有函数。

即使我将绑定标志更改为更简单的(根据我的理解,不应该使新的项目可见):

GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance )

我仍然没有看到这个功能。

1 个答案:

答案 0 :(得分:1)

正如帖子上的评论指出的那样,代码应该有效。问题是我定义函数的类是抽象的,所以我无法找到私有函数。

如果我执行this.GetType().BaseType.GetMethods( BindingFlags.NonPublic | BindingFlags.Instance),则该功能会按预期显示。