gpt4 book ai didi

c# - 我破坏了封装吗?

转载 作者:太空狗 更新时间:2023-10-29 20:33:42 25 4
gpt4 key购买 nike

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");
}

}

我无法找出可以证明我破坏了封装或可能是其他情况的有效点。根据我的理解,我打破了封装,因为私有(private)方法被另一个类调用,这是否足以证明我违反了 OOP 的法律。需要为上面的代码收集更多的内部概念和描述。

最佳答案

这真的取决于你为什么要在 A 类中使用 Raise 方法。

如果它仅用于启用对私有(private)成员的访问,那么答案将是:是的,您的封装已被破坏。
onChanged 事件应该在发生变化时发生,而不是在某些外部类决定它应该发生时发生。

但是,如果这只是表达观点的简单快照,并且 Raise 事件是一种触发事件的方法,作为所采取操作的副作用(例如更改文本一个 Textbox 然后触发 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.

从公共(public)方法调用私有(private)方法是可以的。否则怎么调用它?作为程序员,您有责任弄清楚您的方法逻辑并确保它们调用适当的方法。

关于c# - 我破坏了封装吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24359035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com