【发布时间】:2013-11-30 21:19:44
【问题描述】:
我有一个关于引发基类事件的问题。我目前正在阅读 MSDN C# Programming Guide,但我无法从以下文章中理解一件事:
http://msdn.microsoft.com/en-us/library/vstudio/hy3sefw3.aspx
public void AddShape(Shape s)
{
_list.Add(s);
s.ShapeChanged += HandleShapeChanged;
}
好的,所以我们正在向一个事件注册代理,并且在引发事件时我们将调用 private 方法 HandleShapeChanged。
public void Update(double d)
{
radius = d;
area = Math.PI * radius * radius;
OnShapeChanged(new ShapeEventArgs(area));
}
protected override void OnShapeChanged(ShapeEventArgs e)
{
base.OnShapeChanged(e);
}
这里我们调用基类方法OnShapeChanged,它会触发事件。但是事件是基于Shape类的,那么怎么访问私有的HandleShapeChanged方法呢?
我刚刚开始学习语言,所以请多多包涵。我对这个例子的理解可能偏离了目标。
【问题讨论】:
-
Encapsulation issue with delegates? 的可能副本。引用 Eric Lippert 接受的答案:“方法的可访问域不限制可以调用该方法的位置。它限制可以按名称查找方法的位置。”