加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:44:28 所属栏目:百科 来源:网络整理
导读: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.on
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.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读