visual studio 2013
其他版本
以下簡單示例演示了在基類中宣告可從派生類引發的事件的標準方法。
此模式廣泛應用於 .net framework 類庫中的 windows 窗體類。
在建立可用作其他類的基類的類時,應考慮如下事實:事件是特殊型別的委託,只可以從宣告它們的類中呼叫。
派生類無法直接呼叫基類中宣告的事件。
儘管有時需要事件僅由基類引發,但在大多數情形下,應該允許派生類呼叫基類事件。
為此,您可以在包含該事件的基類中建立乙個受保護的呼叫方法。
通過呼叫或重寫此呼叫方法,派生類便可以間接呼叫該事件。
說明
不要在基類中宣告虛擬事件,也不要在派生類中重寫這些事件。
c# 編譯器無法正確處理這些事件,並且無法預知的該派生的事件的使用者是否真正訂閱了基類事件。
c#複製
namespace baseclasseventspublic
double newarea}}
// base class event publisher
public
abstract
class shape
set
}// the event. note that by using the generic eventhandlerevent type
// we do not need to declare a separate delegate type.
public
event eventhandlershapechanged;
public
abstract
void draw();
//the event-invoking method that derived classes can override.
protected
virtual
void onshapechanged(shapeeventargs e)}}
public
class circle : shape
public
void update(double d)
protected
override
void onshapechanged(shapeeventargs e)
public
override
void draw()
}public
class rectangle : shape
public
void update(double length, double width)
protected
override
void onshapechanged(shapeeventargs e)
public
override
void draw()
}// represents the su***ce on which the shapes are drawn
// subscribes to shape events so that it knows
// when to redraw a shape.
public
class shapecontainer
public
void addshape(shape s)
// ...other methods to draw, resize, etc.
private
void handleshapechanged(object sender, shapeeventargs e)
", e.newarea);
// redraw the shape here.
s.draw();}}
class test
}}/* output:
received event. shape area is now 10201.86
drawing a circle
received event. shape area is now 49
drawing a rectangle
*/
C 如何在派生類中引發基類事件
下面的簡單示例演示用於在基類中宣告事件,以便也可以從派生類引發它們的標準方法。此模式廣泛用於 net 類庫中的 windows 窗體類。建立可以用作其他類的基類的類時,應考慮到以下事實 事件是特殊型別的委託,只能從宣告它們的類中進行呼叫。派生類不能直接呼叫在基類中宣告的事件。雖然有時可能需要只能由基...
在派生類中引發基類事件
1 在建立基類時,若涉及到事件,事件是特殊型別的委託,只可以從宣告它們的類中呼叫,派生類無法直接呼叫基類中宣告的事件,但是在多數情況,會需要允許派生類呼叫基類事件,這時,可以再包含該事件的基類中建立乙個受保護的虛呼叫方法,通過呼叫或重寫此呼叫方法,派生類便可以間接呼叫該事件。注 不要在基類中宣告虛擬...
在派生類中引發基類事件
1 事件是特殊的委託,所以只可以在宣告它的類中呼叫。在基類中宣告乙個事件,所以可以在基類中呼叫,而不能在派生類中直接呼叫。但有些情況下,需要在派生類中引用基類事件,實現方法是,在基類中定義乙個受保護的方法引用事件,然後在派生類中重寫基類方法,利用base關鍵字實現間接呼叫基類事件。2 派生類呼叫基類...