我有一个关于提升基类事件的问题.我目前正在阅读MSDN C#编程指南,我无法从下面的文章中理解一件事:
http://msdn.microsoft.com/en-us/library/vstudio/hy3sefw3.aspx
public void AddShape(Shape s) { _list.Add(s); s.ShapeChanged += HandleShapeChanged; }
好的,所以我们用一个事件注册委托,我们将在引发事件时调用私有方法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方法,这是私有的?
我刚刚开始学习这门语言,所以请耐心等待.我对这个例子的理解可能远远不够.
我看到你的思维方式,感觉就像另一个类正在调用私有方法.但不是,考虑它的最佳方式是在创建委托时检查访问规则,而不是在调用委托时检查.那当然没问题,类可以访问自己的私有方法.
在调用它时检查它也会很糟糕,这需要公开事件处理程序.处理事件几乎总是一个类的非常私有的实现细节,不允许外部代码直接调用.因为这意味着您无法确定事件处理程序中它实际上是触发调用的事件.那很糟糕,非常糟糕.
该事件正在调用该委托.委托中的代码无关紧要.由于未明确调用该方法,因此不适用访问规则.
另请注意,这与事件在基类中的事实无关.即使事件是完全不相关的类,也会发生完全相同的事情.