Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用反射访问私有成员_C#_Reflection - Fatal编程技术网

C# 使用反射访问私有成员

C# 使用反射访问私有成员,c#,reflection,C#,Reflection,短篇小说。 我参与的项目中有人决定使用反射从另一个DLL访问另一个类的成员。为什么?懒惰。 我有一个好(坏?)的习惯,就是在签入文件之前消除所有的Resharper警告。 有一天,我看到一个私有成员在它所属的类中的任何地方都没有被使用……所以,shift+delete和该成员就不见了。 两个月后,我们的一个生产基地出现了一个表演停止者。 我们花了1周时间才发现问题在于反射代码找不到私有成员,包装代码不够好。 碰巧,这也是我们的自动测试没有涵盖的场景 您推荐哪种代码分析工具,我可以在哪里为此类用例

短篇小说。 我参与的项目中有人决定使用反射从另一个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中使用的特定调用实现自动生成的测试。