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的定律。需要为上面的代码收集更多内部概念和说明。
这实际上取决于您为什么Raise
在A类中有一个方法。
如果在那里仅用于启用对私有成员的访问,那么答案将是:是的,您的封装已被破坏。
该onChanged
事件应该在某些更改发生时发生,而不是在某个外部类决定更改时发生。
但是,如果这只是一个简单的快照,并且该Raise
事件是一种触发事件的方法,则该事件是对所执行操作(例如更改a中的文本Textbox
然后触发onTextChanged
)的副作用,而不是封装在机智。
注意:
我正在破坏封装,因为从另一个类调用了私有方法
从维基百科:
封装用于在类内隐藏结构化数据对象的值或状态,以防止未授权方直接访问它们。通常在类中提供可公共访问的方法(所谓的getter和setter)以访问值,其他客户端类则调用这些方法来检索和修改对象中的值。
可以从公共方法调用私有方法。怎么称呼它呢?程序员(您)有责任使您的方法逻辑更直接,并确保它们调用适当的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句