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
根据问题适当) - 那么它没有实现.