Ticker

6/recent/ticker-posts

C# Events & Delegates

 Delegates in C#:


Delegates in C# are similar to function pointers in other languages. They are used to define and reference methods, providing a way to encapsulate and pass around methods as objects. Delegates allow you to treat methods as variables, enabling you to create more flexible and modular code.

 

Here's an example of a delegate declaration and usage in C#:

 


// Delegate declaration
delegate void MyDelegate(string message);

// Method that matches the delegate signature
static void PrintMessage(string message)
{
    Console.WriteLine(message);
}

// Usage of the delegate
static void Main()
{
    MyDelegate del = PrintMessage;
    del("Hello, world!");
}

In the example above, we declare a delegate named `MyDelegate`, which takes a `string` parameter and has a `void` return type. We then define a method named `PrintMessage` that matches the signature of the delegate. Finally, in the `Main` method, we create an instance of the delegate and assign the `PrintMessage` method to it. Calling the delegate with a string argument will invoke the assigned method.

 

Func Delegate:

The `Func` delegate is a built-in generic delegate in C# that can point to a method with up to 16 input parameters and a return value. The last type parameter of `Func` represents the return type, and the preceding type parameters represent the input parameter types.

 

Here's an example of using the `Func` delegate:

// Method that sums two numbers
static int Add(int a, int b)
{
    return a + b;
}

// Usage of the Func delegate
static void Main()
{
    Func addFunc = Add;
    int result = addFunc(5, 3); // result will be 8
}

In the example above, we define a method named `Add` that takes two integers and returns their sum. We then create an instance of the `Func<int, int, int>` delegate named `addFunc` and assign the `Add` method to it. Calling `addFunc` with two integer arguments will invoke the `Add` method and return the sum.

 

Action Delegate:

The `Action` delegate is another built-in generic delegate in C#, similar to the `Func` delegate. However, it does not have a return value. It can point to a method with up to 16 input parameters, but it always has a `void` return type.

 

Here's an example of using the `Action` delegate:


// Method that prints a message
static void PrintMessage(string message)
{
    Console.WriteLine(message);
}

// Usage of the Action delegate
static void Main()
{
    Action printAction = PrintMessage;
    printAction("Hello, world!");
}

In the example above, we define a method named `PrintMessage` that takes a string parameter and prints it. We create an instance of the `Action<string>` delegate named `printAction` and assign the `PrintMessage` method to it. Calling `printAction` with a string argument will invoke the `PrintMessage` method.

 

Predicate Delegate:

The `Predicate` delegate is another built-in generic delegate in C#. It represents a method that takes an input parameter and returns a Boolean value, indicating whether the input satisfies a specific condition.

 

Here's an example of using the `Predicate` delegate:


// Method that checks if a number is even
static bool IsEven(int number)
{
    return number % 2 == 0;
}

// Usage of the Predicate delegate
static void Main()
{
    Predicate isEvenPredicate = IsEven;
    bool result = isEvenPredicate(6);

 // result will be true
}

In the example above, we define a method named `IsEven` that takes an integer and returns `true` if it is even, and `false` otherwise. We create an instance of the `Predicate<int>` delegate named `isEvenPredicate` and assign the `IsEven` method to it. Calling `isEvenPredicate` with an integer argument will invoke the `IsEven` method and return the result.

 

Anonymous Methods:

Anonymous methods in C# provide a way to define and use delegate methods without explicitly declaring a separate named method. They are typically used as event handlers or as a quick way to define simple logic.

 

Here's an example of using an anonymous method:

 


// Usage of an anonymous method
static void Main()
{
    Action printAction = delegate(string message)
    {
        Console.WriteLine(message);
    };

    printAction("Hello, world!");
}

In the example above, we create an instance of the `Action<string>` delegate named `printAction` and assign an anonymous method to it. The anonymous method takes a string parameter and prints it using `Console.WriteLine`. Calling `printAction` with a string argument will invoke the anonymous method and print the message.

 

Anonymous methods can be useful when you need a small piece of code that doesn't require a separate named method. However, with the introduction of lambda expressions in C# 3.0, anonymous methods are less commonly used. Lambda expressions provide a more concise and expressive syntax for defining delegate methods.

Post a Comment

0 Comments