使用反射来检查是否已实现部分方法

mus*_*fan 5 c# reflection partial-methods

背景

我使用Linq to SQL,因此生成包含自动生成的类的DBML文件.生成过程的一部分为某些操作创建了部分方法,在我的例子中,我感兴趣的两个方法与表记录的插入和更新有关.根据DBML设计器中创建的每个表生成这些部分方法,例如:

partial void InsertMyTable(MyTable instance);
partial void UpdateMyTable(MyTable instance);
Run Code Online (Sandbox Code Playgroud)

现在,我的应用程序设计的一部分要求始终为每个表实现这两个部分方法.(它们主要用于向正在插入/更新的记录添加时间戳).

需求

我有一个单元测试项目,虽然这可能不常见,但我希望包含一些测试,以确保某些事情已经正确实施.在这种情况下,我想确保开发人员记住实现上面提到的部分方法(我不关心实际的实现,只是他们已经实现).

问题

我需要做的是使用反射来检查是否已经实现了每个部分方法,但是我无法确定如何确定它.

尝试过的努力

到目前为止,我已经设法获得数据上下文中包含的方法列表,并且我能够将其与每个表的预期方法进行比较.问题是我无法找到确定给定的部分方法是否实际具有实现的方法:

var methods = (typeof(MyDataContext)).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var method in methods) 
{
    Console.WriteLine(method.Name);
    //how to check if method is implemented, or just an unimplemented partial
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 10

你已经做了什么.如果该partial方法没有实现,则它根本不存在.没有"声明存根",你可能会偶然发现反射.部分方法有一个实现,或者它被编译器完全删除.

所以基本上:如果你找不到方法用GetMethod/ GetMethods(BindingFlags根据问题适当) - 那么它没有实现.