Created
April 27, 2012 11:34
-
-
Save TryJSIL/2508549 to your computer and use it in GitHub Desktop.
MSDN Events Tutorial
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://msdn.microsoft.com/en-us/library/aa645739%28v=vs.71%29.aspx | |
// events1.cs | |
using System; | |
namespace MyCollections | |
{ | |
using System.Collections; | |
// A delegate type for hooking up change notifications. | |
public delegate void ChangedEventHandler(object sender, EventArgs e); | |
// A class that works just like ArrayList, but sends event | |
// notifications whenever the list changes. | |
public class ListWithChangedEvent: ArrayList | |
{ | |
// An event that clients can use to be notified whenever the | |
// elements of the list change. | |
public event ChangedEventHandler Changed; | |
// Invoke the Changed event; called whenever list changes | |
protected virtual void OnChanged(EventArgs e) | |
{ | |
if (Changed != null) | |
Changed(this, e); | |
} | |
// Override some of the methods that can change the list; | |
// invoke event after each | |
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; | |
// Add "ListChanged" to the Changed event on "List". | |
List.Changed += new ChangedEventHandler(ListChanged); | |
} | |
// This will be called whenever the list changes. | |
private void ListChanged(object sender, EventArgs e) | |
{ | |
Console.WriteLine("This is called when the event fires."); | |
} | |
public void Detach() | |
{ | |
// Detach the event and delete the list | |
List.Changed -= new ChangedEventHandler(ListChanged); | |
List = null; | |
} | |
} | |
class Test | |
{ | |
// Test the ListWithChangedEvent class. | |
public static void Main() | |
{ | |
// Create a new list. | |
ListWithChangedEvent list = new ListWithChangedEvent(); | |
// Create a class that listens to the list's change event. | |
EventListener listener = new EventListener(list); | |
// Add and remove items from the list. | |
list.Add("item 1"); | |
list.Clear(); | |
listener.Detach(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment