当我们可以使用纯反射时,为什么要使用PrivateObject

时间:2015-11-27 14:30:58

标签: c# reflection

我看了this thread,我想知道为什么有人应该使用PrivateObject。在很多步骤中,我看不到任何纯粹反射无法实现的价值。此外,PrivateObject也使用反射。

对于那个有利于反思的课程是否有任何用处?考虑一下:

var myProp = typeof(MyClass).GetProperty("Name", BindingFlags.Instance | BindingFlags.NonPublic);

var myProp = new PrivateObject(typeof(MyClass)).GetFieldOrProperty("Name");

我注意到有一个非常小的区别,我不需要知道实际的访问修饰符,但我看不出一个优于另一个的任何进一步优势?你呢?

2 个答案:

答案 0 :(得分:1)

Private这样的范围并不是一个安全功能。它们是提高可维护性的一项功能。

想象一下拥有数百万行代码的软件,你不知道哪些类可以使用,哪些不可以使用。

它可以更轻松地控制您的课程及其组织。

答案 1 :(得分:1)

我同意你的看法,使用PrivateObject的语法有点冗长。

我搜索了一些使用动态以较不详细的方式公开属性的内容,并找到了this

它使用反射将私有字段和方法公开为DynamicObject。