c# – 我是否打破了封装?

c# – 我是否打破了封装?,第1张

概述class Program{ static void Main(string[] args) { B b = new B(); b.Run(); Console.Read(); }}class A{ public event Action onChanged; public void Raise()
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方法.

如果它只是为了允许访问私有成员,那么答案是:是的,你的封装已被破坏.
onChanged事件应该在某些内容发生变化时发生,而不是在某些外部类决定应该发生时发生.

但是,如果这只是一个简单的快照来制作一个点,那么Raise事件就是一个触发事件的方法,作为对所采取的动作的副作用(比如改变文本框中的文本,然后触发onTextChanged)而不是封装仍然很机智.

注意:

I am breaking encapsulation as a private method is getting called
from another class

从Wikipedia开始:

Encapsulation is used to hIDe the values or state of a structured data
object insIDe a class,preventing unauthorized partIEs’ direct access
to them. Publicly accessible methods are generally provIDed in the
class (so-called getters and setters) to access the values,and other
clIEnt classes call these methods to retrIEve and modify the values
within the object.

私有方法可以从公共方法调用.它怎么会被称为?程序员可以直接获取方法逻辑,并确保他们调用适当的方法.

总结

以上是内存溢出为你收集整理的c# – 我是否打破了封装?全部内容,希望文章能够帮你解决c# – 我是否打破了封装?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1243468.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存