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

标签 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?
    }
}

更新: 我认为保持封装的最好方法是使用观察者模式(事件),但没有人提到它。这是比公开属性或方法结果更好的解决方案吗?

最佳答案

视情况而定;

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

我怀疑是后者,所以:

 public string Data { get { return data; } }

这只是一个访问器 - 例如,相当于 java 中的 getData()。这不会公开字段,但最终您的对象应该向信息公开一些 API。这并不意味着是一个完整的 secret 。

关于c# - 在不破坏封装的情况下公开对象数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153727/

相关文章:

c# - 多重锁定任务(线程)

c# - 使用数据表的内容更新 SQL 表

c - 为 Cocoa(touch) 开发创建自己的库的指南

java - 匿名类和接口(interface)

c# - 用于公开列表成员的 IEnumerable vs IReadonlyCollection vs ReadonlyCollection

c# - 使用 LINQ 进行选择性排序、部分排序

c# - 如何在文件写入时尽可能快地复制文件?

objective-c - Trying to follow MVC - 寻求良好设计的建议

javascript - js添加封装修改属性值

c++ - 返回类(class)成员是一种不好的做法吗?