使用反射来改变实现

时间:2010-09-01 10:30:58

标签: .net reflection private-members

我的老板认为自己是OOP Guru,我认为他是一个业余爱好者程序员。他处理我们的Sage开发,为我们的客户Sage安装添加定制要求。他最近对反思感到非常兴奋,他正在反思Sage的代码汇编和更改私人成员和事件处理程序。我认为这不是一个好主意,但他让我失望,说Sage认为他能做到这一点真是太神奇了。我认为这是不好的做法,因为它效率低下,因为如果他们在任何时候改变他们的实现,我们的代码就会崩溃。我的意思是,通常开发人员出于某种原因私有化了吗?

关于此的一般规则是什么?

如果这看起来像一个愚蠢的问题,非常感谢和道歉。

3 个答案:

答案 0 :(得分:4)

你是对的。如果你依赖于第三方库的实现细节,你最好准备好在更新第三方库时重写所有内容,以及当你用一些“无辜”值更改某些私有变量时出现意外的副作用。

答案是只有当你100%确定自己在做什么并准备好面对后果时才能做到。

答案 1 :(得分:2)

您不应该修改现有的程序集 - 结果可能是未知的,并且组件供应商肯定不支持。此外,此类更改将失去程序集签名,保证程序集是供应商提供的版本。

基本上,任何事情都可能发生,因此,除非您愿意进行非常严格的测试,并且没有供应商的支持,否则请保持良好状态!

答案 2 :(得分:1)

程序集的每个新版本都可以具有完全不同的实现。 Sage的软件更新可能会使您的Boss代码完全无效,并且需要完全重新开发才能重新建立相同的功能。

对于一个真实的例子:.NET 3.5中的StringBuilder在内部使用了string,在.NET 4中它使用了char[],请参阅此recent question。)