在派生類中引發基類事件

2021-09-25 21:54:14 字數 2317 閱讀 6323

1、  在建立基類時,若涉及到事件,事件是特殊型別的委託,只可以從宣告它們的類中呼叫,派生類無法直接呼叫基類中宣告的事件,但是在多數情況,會需要允許派生類呼叫基類事件,這時,可以再包含該事件的基類中建立乙個受保護的虛呼叫方法,通過呼叫或重寫此呼叫方法,派生類便可以間接呼叫該事件。

注:不要在基類中宣告虛擬事件,也不要在派生類中重寫這些事件,c#編譯器無法正確處理這些事件,並且無法預知該派生的事件的使用者是否真正訂閱了基類事件。

和下面的程式示例都來自:

2、  插入知識點:virtual和abstract的區別:

virtual和abstract都是用來修飾父類的,通過覆蓋父類的定義,讓子類重新定義(子類方法前都必須新增override),因此虛擬方法和抽象方法都不能是私有的;

virtual修飾的方法必須有實現(哪怕是僅僅新增一對大括號),而abstract修飾的方法一定不能實現;

virtual可以被子類重寫,而abstract必須被子類重寫;

如果類成員被abstract修飾,則該類前必須新增abstract,因為只有抽象類才可以有抽象方法;

無法建立abstract類的例項;

3、示例程式

1

namespace

test0301220

}2122public

class

shapeeventargs : eventargs

2330

31public

double

newarea

3234}35

}3637public

abstract

class

shape

3844

set 45}

4647

public

event eventhandlershapechanged;

4849

public

abstract

void draw();//

abstract和類定義的abstract對應,在派生類中必須實現

5051

//基類可以過載此函式,實現實際物件型別的此函式

52//

此函式為事件控制代碼的實現函式

53protected

virtual

void

onshapechanged(shapeeventargs e)

54呼叫

", this

.tostring());

5657 eventhandlerhandler =shapechanged;

58if (handler != null)59

62}63}

6465

public

class

circle : shape

6674

75public

void update(double

d)76

8182

protected

override

void

onshapechanged(shapeeventargs e)

8390

91public

override

void

draw()

9296}97

98public

class

rectangle : shape

99109

110public

void update(double length, double

width)

111117

118protected

override

void

onshapechanged(shapeeventargs e)

119123

124public

override

void

draw()

125129

}130

131public

class

shapecontainer

132139

140public

void

addshape(shape s)

141146

147private

void handleshapechanged(object

sender, shapeeventargs e)

148"

, e.newarea);

152153

s.draw();

154}

155}

156 }

在派生類中引發基類事件

1 事件是特殊的委託,所以只可以在宣告它的類中呼叫。在基類中宣告乙個事件,所以可以在基類中呼叫,而不能在派生類中直接呼叫。但有些情況下,需要在派生類中引用基類事件,實現方法是,在基類中定義乙個受保護的方法引用事件,然後在派生類中重寫基類方法,利用base關鍵字實現間接呼叫基類事件。2 派生類呼叫基類...

C 如何在派生類中引發基類事件

下面的簡單示例演示用於在基類中宣告事件,以便也可以從派生類引發它們的標準方法。此模式廣泛用於 net 類庫中的 windows 窗體類。建立可以用作其他類的基類的類時,應考慮到以下事實 事件是特殊型別的委託,只能從宣告它們的類中進行呼叫。派生類不能直接呼叫在基類中宣告的事件。雖然有時可能需要只能由基...

如何 在派生類中引發基類事件(C 程式設計指南

visual studio 2013 其他版本 以下簡單示例演示了在基類中宣告可從派生類引發的事件的標準方法。此模式廣泛應用於 net framework 類庫中的 windows 窗體類。在建立可用作其他類的基類的類時,應考慮如下事實 事件是特殊型別的委託,只可以從宣告它們的類中呼叫。派生類無法直...