![]() |
1
75
正如其他人所说,由于字段是私有的,所以您不应该试图用普通代码来获取它。 唯一可以接受的时间是在单元测试期间,即使这样,您也需要一个很好的理由(例如,将私有变量设置为空,这样异常块中的代码将被命中并可以被测试)。 您可以使用如下方法获取字段:
所以你可以这样称呼它:
同样,这在大多数情况下不应该使用。 |
![]() |
2
16
你不能-你不是故意的。它是 私有的 . 如果这是其他人的类,那么很明显他们不希望您访问该字段。它是私有的这一事实允许它们稍后更改实现——它们可能以该值作为另一个变量的一部分结束,或者重命名,或者如果不再需要它来实现公共API,则可能完全消失。 如果它是您自己的类,并且您确定希望其他人能够访问它,只需使用属性公开它:
编辑:看到您的评论后,您 可以 通过反射访问私有字段…但是对于验收测试,你不应该这样做。您应该测试公共API。为了 单元 测试有时会弯曲规则,将类视为“白盒”而不是“黑盒”测试是有意义的,但是对于验收测试,我绝对会坚持使用公共API。
如果这不起作用,我建议您与生产代码的开发人员交谈:解释为什么您希望访问,并要求他们通过属性公开它。它们可以使其成为内部属性,并使用
|
![]() |
3
5
使用反射,但要准备好被一个程序员的大棒击中。 |
![]() |
4
2
如果您是类,并且希望在类外部提供对它的访问,请通过公共属性公开它:
否则,不要在课堂之外使用它。你不是故意的。 编辑 基于您对您实际上正在对生产代码进行QA测试的评论,我会质疑在测试期间访问私有值背后的原因。实际上,您只需要测试公开的属性/方法,以验证所有内容是否都按预期工作。 尽管如此,如果真的没有办法解决问题,你可以利用反射来获得价值。 |
![]() |
5
0
您可以使用这个扩展方法。
|
![]() |
6
0
如果您正在使用它进行单元测试,我实现了@dcp's answer的通用版本,它提供了以下额外功能:
代码:
|
![]() |
7
0
除了@dcp answer之外,通过将其转换为通用函数可以更容易地实现…
|
![]() |
8
0
这是一个有效的通用版本,尽我所能的清晰。
使用
|
![]() |
9
-2
使之成为公共财产
该属性声明将允许任何外部类读取变量,但不修改它(因此是私有的“setter”)。 编辑:刚刚看到你对另一个答案的评论。您将不得不使用relation来获取这样的私有变量。和另一个建议的答案一样,一定要用棍子小心程序员;)。这就是说,谷歌的做法是“用反射c寻找房产价值”。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 5 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 6 月前 |