C# Tutorial

C# Tutorial C# First Application C# Variables C# Data Types C# Operators C# Keywords

C# Control Statement

C# If Statements C# Switch Statements C# for Loop C# While Loop C# do While loop C# Jump Statements C# Function C# functions with out variable

C# Arrays

C# Arrays

C# Function

C# Function call by value C# Call by reference C# Passing array to function C# Multidimensional Arrays C# Jagged Arrays C# Params C# Array Class C# Command Line Arguments

C# Object Class

C# Object and Classes C# Constructors C# Destructor C# this Keyword C# static field C# static class C# Static Constructor C# Structs C# enum C# Properties

C# Inheritance

C# Inheritance C# Multilevel Inheritance C# Aggregation C# Member overloading C# Method Overriding C# Base

C# Polymorphism

C# Polymorphism C# Sealed

C# Abstraction

C# Abstraction C# Interface

C# Namespace

C# Namespace C# Access Modifiers C# Encapsulation

C# Strings

C# String

C# Misc

C# Design Patterns Dictionary in C# Boxing and Unboxing in C# Ref and Out in C# Serialization in C# Dispose and Finalize in C# CONSOLE LOG IN C# Get File extension in C# Insert query in c# Difference Between List and Dictionary in C# Getters and Setters in C# Extension Methods in C# Insert query in c# CONSOLE LOG IN C# Get File extension in C# Random.NextDouble() Method in C# Binary Search in C# Difference between Delegates and Interfaces in C# Double.IsFinite() Method in C# Index Constructor in C# Abstraction in C# Basic OOPS Concepts In C# Queue.CopyTo() Method in C# single.compareto() method in C# C# Throw Exception in Constructor DECODE IN C# file.setlastwritetimeutc() method in C# Convert Object to List in C# convert.ToSByte(string, IFormatProvider) Method in C# C# Declare Delegate in Interface console.TreatControl C As Input property in C# Copying the queue elements to 1-D Array in C# Array.Constrainedcopy() Method in C# C# in and out Char.IsLetterOrDigit() method in C# Debugging in C# decimal.compare() method in C# Difference between Console.Read and Console.Readline in C# Metadata in C# C# Event Handler Example Default Interface Methods in C# Difference between hashtable and dictionary in C# C# program to implement IDisposable Interface Encapsulation in C# SortedList.IndexOfVaalue(Object) Method in C# Hash Maps in C# How to clear text files in C# How to Convert xls to xlsx in C# Foreach loop in C# FIFO in C# How to handle null exception in C# Type.Is Instance Of Type() Method in C# How to add data into MySQL database using C# How to use angular js in ASP net Csharp decimal.compare() method in Csharp Difference between Console.Read and Console.Readline in Csharp How to Implement Interface in Csharp char.IsUpper() Method in C# Index Of Any() Method in C# Quantifiers in C# C# program to Get Extension of a Given File C# Error Logging C# ENCRIPTION Can we create an object for Abstract Class in C# Console.CursorVisible in C# SortedDictionary Implementation in C# C# Hash Table with Examples Setting the Location of the Label in c# Collections in c# Virtual Keyword in C# Reverse of string in C# String and StringBuilder in C# Encapsulation in C# SortedList.IndexOfVaalue(Object) Method in C# Hash Maps in C# How to clear text files in C# How to Convert xls to xlsx in C# Foreach loop in C# FIFO in C# How to handle null exception in C# Type.Is Instance Of Type() Method in C# How to add data into MySQL database using C# How to use angular js in ASP net Csharp decimal.compare() method in Csharp Difference between Console.Read and Console.Readline in Csharp How to Implement Interface in Csharp char.IsUpper() Method in C# Index Of Any() Method in C# Quantifiers in C# C# program to Get Extension of a Given File Difference between ref and out in C# Singleton Class in C# Const And Readonly In Csharp BinaryReader and BinaryWriter in C# C# Attributes C# Delegates DirectoryInfo Class in C# Export and Import Excel Data in C# File Class in C# FileInfo Class in C# How to Cancel Parallel Operations in C#? Maximum Degree of Parallelism in C# Parallel Foreach Loop in C# Parallel Invoke in C# StreamReader and StreamWriter in C# TextReader and TextWriter in C# AsQueryable() in C# Basic Database Operations Using C# C# Anonymous Methods C# Events C# Generics C# Indexers C# Multidimensional Indexers C# Multithreading C# New Features C# Overloading of Indexers Difference between delegates and events in C# Operator overloading in C# Filter table in C# C# Queue with Examples C# Sortedlist With Examples C# Stack with Examples C# Unsafe Code File Handling in C# HashSet in C# with Examples List Implementation in C# SortedSet in C# with Examples C# in Depth Delegates and Events in C# Finally Block in C# How to Split String in C# Loggers in C# Nullable Types in C# REVERSE A STRING IN C# TYPE CASTING IN C# What is Generics in C# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# Atomic Methods Thread Safety and Race Conditions in C# Parallel LINQ in C# Design Principles in C# Difference Between Struct And Class In C# Difference between Abstraction and Encapsulation in C# Escape Sequence Characters in C# What is IOC in C# Multiple Catch blocks in C# Appdomain in C# Call back methods in C# Change Datetime format in C# Declare String array in C# Default Access Specifier in c# Foreach in LINQ C# How to compare two lists in C# How to Convert String to Datetime in c# How to get only Date from DateTime in C# Ispostback in asp net C# JSON OBJECT IN C# JSON STRINGIFY IN C# LAMBDA FUNCTION IN C# LINQ Lambda Expression in C# Microservices in C# MSIL IN C# Reference parameter in C# Shadowing(Method hiding) in C# Solid principles in C# Static Members in C# Task run in C# Transaction scope in C# Type Conversion in c# Unit of Work in C# Unit Test Cases in c# User Defined Exception in c# Using Keyword in C# Var Keyword in C# What is gac in C#

C# Event Handler Example

C# Event Handler:

An event is a signal that an item sends out to indicate that an action has taken place. In.NET, events adhere to the observer design pattern.

Publisher is the class that raises events, while Subscriber is the class that receives the notification. An event can have more than one subscription. Publishers usually raise an event in response to an activity. Subscribers who wish to receive notifications when an action takes place ought to register and manage events.

An event in C# is a delegate that has been wrapped. That depends on who is delegating. The delegate defines the subscriber class's event handler method's signature.

When a Publisher-Subscriber design pattern is applied, events and event handlers are typically utilized when a specific class experiences an event and wants to inform other classes about it. A conditional event in the Publisher class is called, and subscribers are notified according to their subscription. The publisher can be made aware of who receives notifications, which is one of its main advantages.

Events are things that take place within a program. A class or object can alert other classes or objects to an event by using events.

C# Events

The publisher is the class that raises (or despatches) the event.

  • Subscribers are the classes that receive (or handle) the event. Additionally, event handlers are frequently the name given to the class methods that deal with events.
  • The term "publisher/subscriber" describes this trend. According to this structure, the subscribers choose how to handle the event, and the publisher decides when to raise it.

Assume you have an Order class and that its Create() function generates new orders:

Code:

class Order

{

    public void Create()

    {

        Console.WriteLine("Created the order");

    }

}

Plus, two more classes that include email and SMS capabilities:

Code:

class Email

{

    public static void Send()

    {

        Console.WriteLine("email should be sent");

    }

}

class Message

{

    public static void Send()

    {

        Console.WriteLine("Message should be sent");

    }

}

You should send the consumer a Message and email as soon as an order is created. You might generate the following code to accomplish it:

Code:

class Order

{

    public void Create()

    {

        Console.WriteLine("Created the order");

        Email.Send();

        Message.Send();

    }

}

Afterward, you must alter the Create() method if you wish to perform other actions when order is formed. Furthermore, it is not a smart design for the Order class to be dependent on the Email and Message classes. You can use the publisher/subscriber pattern to fix this:

  • The publisher belongs to the Order class.
  • The subscribers are the Email and Message classes.

The Order object notifies the Email and Message classes to send an email and a Message when an order is created.

Announcement of an Event:

When an order is created, the OnCreated event is declared as follows:

delegate void OrderEventHandler();

class Order

{

    public event OrderEventHandler OnCreated;

    public void Create()

    {

        Console.WriteLine("We have created the order");

    }

}

                  An event must be declared inside the class because it is a member of the class. In this case, the event is made public so that handlers from other classes can register for it. Additionally, the delegate type linked to the event and the event handlers must match.

Bringing up a situation

Invoking a method is equivalent to raising an event. Null is the state of an event that has no event handlers. As a result, you must compare an event to null before elevating it.

The Create() method's OnCreated event is raised by the following:

class Order

{

    public event OrderEventHandler OnCreated;

    public void Create()

    {

        Console.WriteLine("We have created the order");

        if(OnCreated != null)

        {

            OnCreated();

        }

    }

}

EventHandler:

When you use events, you don't need to define a new delegate type because EventHandler C# gives you access to the standard EventHandler delegate type.

The declaration of the EventHandler delegate type is displayed as follows:

public delegate void EventHandler(object sender, EventArgs e);

With this particular delegate type:

  • The sender references the object that raised the event.
  • The state information, which might be anything relevant to the program, is stored in the EventArgs object.

It's critical to realize that event handlers that do not require data passing from publisher to subscriber are not intended users of EventArgs. You must define a class that is inherited from the EventArgs class if you wish to pass the data.

The program that follows demonstrates how to use the order-created event's EventHandler:

class Order

{

    public event EventHandler OnCreated;

    public void Create()

    {

        Console.WriteLine("We have created the order");

        if(OnCreated != null)

        {

            OnCreated(this, EventArgs.Empty);

        }

    }

}

class Email

{

    public static void Send(object sender, EventArgs e)

    {

        Console.WriteLine($"Send an email");

    }

}

class Message

{

    public static void Send(object sender, EventArgs e)

    {

        Console.WriteLine($"Send Meassage");

    }

}

class Program

{

    static void Main(string[] args)

    {

        var order = new Order();

        order.OnCreated += Email.Send;

        order.OnCreated += Message.Send;

        order.Create();

    }

}