在不破坏封装的情况下公开对象数据

Jon*_*yMC 3 c# oop encapsulation

良好的面向对象设计表明对象不应暴露其内部.鉴于这种情况,显示数据的最佳方式是什么?

例如,在控制台应用程序中调用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?
    }
}
Run Code Online (Sandbox Code Playgroud)

更新: 我认为维护封装的最佳方法是使用观察者模式(事件),但没有人提到它.这是一个比暴露属性或方法结果更好的解决方案吗?

Mar*_*ell 5

这取决于;

  • 如果值仅与方法相关,则使其成为方法的返回值
  • 如果值与对象相关,则通过属性公开它

我怀疑是后者,所以:

 public string Data { get { return data; } }
Run Code Online (Sandbox Code Playgroud)

这只是一个访问器 - 例如,相当于getData()java.这不是暴露字段,但最终您的对象应该向信息公开一些 API.这并不是一个完整的秘密.