c# – 我是否打破了封装?
class Program { static void Main(string[] args) { B b = new B(); b.Run(); Console.Read(); } } class A { public event Action onChanged; public void Raise() { if (onChanged != null) onChanged(); } } class B { public void Run() { A a = new A(); a.onChanged += a_onChanged; a.Raise(); } private void a_onChanged() { Console.WriteLine("Wow! Invoked"); } } 我无法弄清楚可以证明我打破封装的有效点,或者可能不是.根据我的理解,我打破了封装,因为私有方法正在从另一个类调用,这足以证明我违反了OOP法则.需要为上面的代码收集更多的内部概念和描述. 解决方法
这实际上取决于为什么你在A类中有一个Raise方法.
如果它只是为了允许访问私有成员,那么答案是:是的,你的封装已被破坏. 但是,如果这只是一个简单的快照来制作一个点,那么Raise事件就是一个触发事件的方法,作为对所采取的动作的副作用(比如改变文本框中的文本,然后触发onTextChanged)而不是封装仍然很机智. 注意:
从Wikipedia开始:
私有方法可以从公共方法调用.它怎么会被称为?程序员可以直接获取方法逻辑,并确保他们调用适当的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |