良好的面向对象设计表明对象不应暴露其内部结构。在这种情况下,显示数据的最佳方式是什么?
例如,在控制台应用程序中调用 DoSomethingToData 后,您将如何显示数据字段?
public class Foo {
string data;
public void DoSomethingToData(string someParam) {
.....
}
}
class Program {
static void Main(string[] items) {
var foo = new Foo();
foo.DoSomethingToData("blah");
..... // how do we write data field to console without breaking encapsulation?
}
}
更新: 我认为保持封装的最好方法是使用观察者模式(事件),但没有人提到它。这是比公开属性或方法结果更好的解决方案吗?
最佳答案
视情况而定;
- 如果该值仅与方法有关,则将其作为方法的返回值
- 如果值与对象相关,则通过属性公开它
我怀疑是后者,所以:
public string Data { get { return data; } }
这只是一个访问器 - 例如,相当于 java 中的 getData()
。这不会公开字段,但最终您的对象应该向信息公开一些 API。这并不意味着是一个完整的 secret 。
关于c# - 在不破坏封装的情况下公开对象数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153727/