国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C#事件機制歸納(上)

2024-07-21 02:19:34
字體:
來源:轉載
供稿:網友
1.委派的實現過程。

首先來看一下委派,委派其實就是方法的傳遞,并不定義方法的實現。事件其實就是標準化了的委派,為了事件處理過程特制的、稍微專業化一點的組播委派(多點委派)。下面舉一個例子,我覺得把委派的例子和事件的例子比較,會比較容易理解。

using system;



class class1

{

delegate int mathop(int i1,int i2);

static void main(string[] args)

{

mathop op1=new mathop(add);

mathop op2=new mathop(multiply);

console.writeline(op1(100,200));

console.writeline(op2(100,200));

console.readline();

}

public static int add(int i1,int i2)

{

return i1+i2;

}

public static int multiply(int i1,int i2)

{

return i1*i2;

}

}



首先代碼定義了一個委托mathop,其簽名匹配與兩個函數add()和multiply()的簽名(也就是其帶的參數類型數量相同):

delegate int mathop(int i1,int i2);

main()中代碼首先使用新的委托類型聲明一個變量,并且初始化委托變量.注意,聲明時的參數只要使用委托傳遞的函數的函數名,而不加括號:

mathop op1=new mathop(add);

(或為mathop op1=new mathop(multiply);)

委托傳遞的函數的函數體:

public static int add(int i1,int i2)

{

return i1+i2;

}

public static int multiply(int i1,int i2)

{

return i1*i2;

}

然后把委托變量看作是一個函數名,將參數傳遞給函數。 console.writeline(op1(100,200));

console.writeline(op2(100,200));





2.事件的實現過程

using system;



class class1

{

static void main(string[] args)

{

student s1=new student();

student s2=new student();

s1.registerok +=new student.delegateregisterokevent(student_registerok);

s2.registerok +=new student.delegateregisterokevent(student_registerok);

s1.register();

s2.register();

console.readline();

}

static void student_registerok()

{

console.writeline("hello");

}

}



class student

{

public delegate void delegateregisterokevent();

public event delegateregisterokevent registerok;

public string name;

public void register()

{

console.writeline("register method");

registerok();

}

}

在student類中,先聲明了委托delegateregisterokevent(),然后使用event和要使用的委托類型(前面定義的delegateregisterokevent委托類型)聲明事件registerok(可以看作是委托的一個實例。):

public delegate void delegateregisterokevent();

public event delegateregisterokevent registerok;

然后在main()函數中,實例化student類,然后s1.registerok事件委托給了student_registerok 方法。通過“+=”(加等于)操作符非常容易地為.net對象中的一個事件添加一個甚至多個響應方法;還可以通過非常簡單的“-=”(減等于)操作符取消這些響應方法。

然后,當調用s1.register()時,事件s1.registerok發生。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌鲁木齐市| 吉林省| 富蕴县| 临猗县| 伽师县| 泰来县| 固原市| 疏勒县| 连江县| 金秀| 焉耆| 陵水| 曲周县| 抚顺市| 兴和县| 新宾| 吐鲁番市| 临桂县| 本溪市| 安龙县| 繁峙县| 苍南县| 邵东县| 枣庄市| 子洲县| 平泉县| 清苑县| 游戏| 昔阳县| 治多县| 阿瓦提县| 堆龙德庆县| 竹山县| 常山县| 尚义县| 郁南县| 成安县| 轮台县| 乐都县| 天门市| 偃师市|