C# 使用反射访问私有成员
短篇小说。 我参与的项目中有人决定使用反射从另一个DLL访问另一个类的成员。为什么?懒惰。 我有一个好(坏?)的习惯,就是在签入文件之前消除所有的Resharper警告。 有一天,我看到一个私有成员在它所属的类中的任何地方都没有被使用……所以,shift+delete和该成员就不见了。 两个月后,我们的一个生产基地出现了一个表演停止者。 我们花了1周时间才发现问题在于反射代码找不到私有成员,包装代码不够好。 碰巧,这也是我们的自动测试没有涵盖的场景 您推荐哪种代码分析工具,我可以在哪里为此类用例设置规则C# 使用反射访问私有成员,c#,reflection,C#,Reflection,短篇小说。 我参与的项目中有人决定使用反射从另一个DLL访问另一个类的成员。为什么?懒惰。 我有一个好(坏?)的习惯,就是在签入文件之前消除所有的Resharper警告。 有一天,我看到一个私有成员在它所属的类中的任何地方都没有被使用……所以,shift+delete和该成员就不见了。 两个月后,我们的一个生产基地出现了一个表演停止者。 我们花了1周时间才发现问题在于反射代码找不到私有成员,包装代码不够好。 碰巧,这也是我们的自动测试没有涵盖的场景 您推荐哪种代码分析工具,我可以在哪里为此类用例
谢谢没有工具,因为没有办法在DLL端进行测试 保留某些方法是公共的,而某些方法是私有的,这是因为您可以拥有一个已发布的契约,使用您的DLL的人可以使用它。您在DLL中的内部操作应该是一个黑匣子,没有人应该知道或关心正在发生的事情 对此进行“测试”的唯一方法是在调用方为任何使用反射的函数编写bog标准单元测试。然后,您必须确保DLL的发布版本与您进行单元测试的版本相匹配
对于使用反射的人,让他证明自己的理由,如果不是,statisfactory将他置于试用期,要求他提交的所有代码在允许签入之前都要进行更彻底的审查。如果他不停止这样做(或者在他绝对不应该停止的时候使用反射,或者不为他的代码编写单元测试,这些代码必须使用反射来确保他调用的代码没有内部更改)他应该被解雇没有工具,因为没有办法在DLL方面进行测试 保留某些方法是公共的,而某些方法是私有的,这是因为您可以拥有一个已发布的契约,使用您的DLL的人可以使用它。您在DLL中的内部操作应该是一个黑匣子,没有人应该知道或关心正在发生的事情 对此进行“测试”的唯一方法是在调用方为任何使用反射的函数编写bog标准单元测试。然后,您必须确保DLL的发布版本与您进行单元测试的版本相匹配
对于使用反射的人,让他证明自己的理由,如果不是,statisfactory将他置于试用期,要求他提交的所有代码在允许签入之前都要进行更彻底的审查。如果他不停止这样做(或者在他绝对不应该停止的时候使用反射,或者不为他的代码编写单元测试,必须使用反射来确保他调用的代码没有内部更改)他应该被解雇你的第二个问题是主观的,与本网站无关,请将其从问题中删除。回答:解雇使用反射访问生产代码中的私有成员的白痴。如果他已经被解雇了,继续在他的草坪上大便。@JonathonReinhart-这是一个有趣的建议。。。也可能应该改为指向OP:人们必须使用反射来访问私有方法的主要原因是API提供者拒绝公开必要的功能。因此,为了避免DLL更好地提供有用的完整API…@AlexeiLevenkov如果您在人们使用反射的主要原因是反射的环境中工作,我恳求你再找一份工作。@PrestonGuillot你使用反射调用私有方法/获取私有字段的好理由是什么?你的第二个问题是主观的,与本网站无关,请将其从问题中删除。回答:解雇使用反射访问生产代码中私有成员的白痴。如果他已经被解雇了,继续在他的草坪上大便。@JonathonReinhart-这是一个有趣的建议。。。也可能应该改为指向OP:人们必须使用反射来访问私有方法的主要原因是API提供者拒绝公开必要的功能。因此,为了避免DLL更好地提供有用的完整API…@AlexeiLevenkov如果你在一个人们使用反射的主要原因是反射的环境中工作,我恳求你找到另一个gig。@PrestonGuillot你使用反射调用私有方法/获取私有字段的好理由是什么?这是我读过的最好的答案。而且,你也100%正确。你刚刚给了我一个想法。我认为我们可以限制程序员使用.NET反射API。相反,我们可以为反射代码创建一个代理API,并根据代理API中使用的特定调用实现自动生成的测试。这是我读过的最好的答案。而且,你也100%正确。你刚刚给了我一个想法。我认为我们可以限制程序员使用.NET反射API。相反,我们可以为反射代码创建代理API,并根据代理API中使用的特定调用实现自动生成的测试。