建立符合 .NET Framework 準則的事件(C# 編程指南) msdn

來源:互聯網
上載者:User

 

代碼

// 著作權 (C) Microsoft Corporation。著作權所有,並保留一切權利。

// events1.cs
using System;
namespace MyCollections
{
using System.Collections;

// 用於對更改通知進行掛鈎的委託類型。
public delegate void ChangedEventHandler(object sender, EventArgs e);

// 一個類,其作用與 ArrayList 相似,
// 但在每次列表更改時發送通知。
public class ListWithChangedEvent: ArrayList
{
// 一個事件,每當列表元素更改時,用戶端可利用該事件
// 獲得通知。
public event ChangedEventHandler Changed;

// 調用 Changed 事件;每當列表更改時調用
protected virtual void OnChanged(EventArgs e)
{
if (Changed != null)
Changed(this, e);
}

// 重寫可更改列表的某些方法;
// 在每個重寫後呼叫事件
public override int Add(object value)
{
int i = base.Add(value);
OnChanged(EventArgs.Empty);
return i;
}

public override void Clear()
{
base.Clear();
OnChanged(EventArgs.Empty);
}

public override object this[int index]
{
set
{
base[index] = value;
OnChanged(EventArgs.Empty);
}
}
}
}

namespace TestEvents
{
using MyCollections;

class EventListener
{
private ListWithChangedEvent List;

public EventListener(ListWithChangedEvent list)
{
List = list;
// 將“ListChanged”添加到“List”中的 Changed 事件。
List.Changed += new ChangedEventHandler(ListChanged);
}

// 每當列表更改時就會進行以下調用。
private void ListChanged(object sender, EventArgs e)
{
Console.WriteLine("This is called when the event fires.");
}

public void Detach()
{
// 分離事件並刪除列表
List.Changed -= new ChangedEventHandler(ListChanged);
List = null;
}
}

class Test
{
// 測試 ListWithChangedEvent 類。
public static void Main()
{
// 建立新列表。
ListWithChangedEvent list = new ListWithChangedEvent();

// 建立一個類,用於偵聽列表的變更事件。
EventListener listener = new EventListener(list);

// 在列表中添加和移除項。
list.Add("item 1");
list.Clear();
listener.Detach();
Console.ReadKey();
}
}
}

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.