Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum TaskStatus
- {
- Started,
- StillProcessing,
- Finished
- }
- delegate void CallbackDelegate(Task t, TaskStatus status);
- class Task
- {
- public void Start(CallbackDelegate callback)
- {
- callback(this, TaskStatus.Started);
- // calculate PI to 1 billion digits
- for (...)
- {
- callback(this, TaskStatus.StillProcessing);
- }
- callback(this, TaskStatus.Finished);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Task t = new Task();
- t.Start(new CallbackDelegate(MyCallbackMethod));
- }
- static void MyCallbackMethod(Task t, TaskStatus status)
- {
- Console.WriteLine("The task status is {0}", status);
- }
- }
- private delegate void UpdateHandler(string message);
- private UpdateHandler Update;
- public void Register(IObserver observer)
- {
- Update+=observer.Update;
- }
- public void Unregister(IObserver observer)
- {
- Update-=observer.Update;
- }
- public void Notify(string message)
- {
- Update(message);
- }
- public Subject()
- {
- observers = new List<IObserver>();
- }
- public void Register(IObserver observer)
- {
- observers.Add(observer);
- }
- public void Unregister(IObserver observer)
- {
- observers.Remove(observer);
- }
- public void Notify(string message)
- {
- // call update method for every observer
- foreach (IObserver observer in observers)
- {
- observer.Update(message);
- }
- }
- public delegate void UpdateHandler(string message);
- private UpdateHandler Update;
- public void Register(UpdateHandler observerRoutine)
- {
- Update+=observerRoutine;
- }
- public void Unregister(UpdateHandler observerRoutine)
- {
- Update-=observerRoutine;
- }
- public void Notify(string message)
- {
- Update(message);
- }
- public delegate string TestDelegate();
- protected void Page_Load(object sender, EventArgs e)
- {
- TestDelegate TD1 = new TestDelegate(DiaplayMethodD1);
- TestDelegate TD2 = new TestDelegate(DiaplayMethodD2);
- TD2 = TD1 + TD2; // Make TD2 as multi-cast delegate
- lblDisplay.Text = TD1(); // invoke delegate
- lblAnotherDisplay.Text = TD2();
- // Note: Using a delegate allows the programmer to encapsulate a reference
- // to a method inside a delegate object. Its like the function pointer
- // in C or C++.
- }
- //the Signature has to be same.
- public string DiaplayMethodD1()
- {
- //lblDisplay.Text = "Multi-Cast Delegate on EXECUTION"; // Enable on multi-cast
- return "This is returned from the first method of delegate explanation";
- }
- // The Method can be static also
- public static string DiaplayMethodD2()
- {
- return " Extra words from second method";
- }
Add Comment
Please, Sign In to add comment