ডেলিগেট (Delegate) হল একটি টাইপ-সেফ ফাংশন পয়েন্টার যা মেথড রেফারেন্স ধারণ করে। এর মাধ্যমে রানটাইমে মেথড ডাইনামিক্যালি কল করা যায় (কলব্যাক, স্ট্র্যাজি প্যাটার্ন)।
ডেলিগেট ডিক্লেরেশন
public delegate double MathOperation(double x); // সিগনেচার: double ইনপুট, double আউটপুট
সম্পূর্ণ উদাহরণ: ডেলিগেট দিয়ে ভাগ করা
using System;
public class MathOperations
{
public static double DivideBy5(double value) => value / 5;
public static double MultiplyBy2(double value) => value * 2;
public static double Square(double value) => value * value;
}
class DelegateMathDemo
{
// ডেলিগেট টাইপ
delegate double MathOperation(double x);
static void Main()
{
// ডেলিগেট ইনস্ট্যান্সিয়েশন
MathOperation op1 = MathOperations.DivideBy5;
MathOperation op2 = MathOperations.MultiplyBy2;
MathOperation op3 = MathOperations.Square;
// ডেলিগেট অ্যারে
MathOperation[] operations = { op1, op2, op3 };
double input = 20;
Console.WriteLine($"Input: {input}\n");
foreach (var op in operations)
{
double result = op(input); // ডেলিগেট ইনভোক
Console.WriteLine($"Result: {result}");
}
// ল্যাম্বডা এক্সপ্রেশন (C# 3+)
MathOperation lambda = x => x * x + 10;
Console.WriteLine($"\nLambda (x^2 + 10): {lambda(input)}");
// Func<double, double> বিল্ট-ইন ডেলিগেট
Func func = MathOperations.DivideBy5;
Console.WriteLine($"Func delegate: {func(input)}");
}
}
আউটপুট
Input: 20
Result: 4 (20 / 5)
Result: 40 (20 * 2)
Result: 400 (20 * 20)
Lambda (x^2 + 10): 410
Func delegate: 4
ডেলিগেটের ধরন
| টাইপ | সিনট্যাক্স | প্যারামিটার | রিটার্ন |
|---|---|---|---|
| Action | Action<T1,T2> | 0-16 | void |
| Func | Func<T1,T2,TResult> | 0-16 | TResult |
| Predicate | Predicate<T> | 1 | bool |
| Custom Delegate | delegate R Name(T) | Custom | Custom |
ব্যবহারিক সিনেরিও
- স্ট্র্যাজি প্যাটার্ন (অ্যালগরিদম সেলেকশন)
- ইভেন্ট হ্যান্ডলিং
- LINQ (Where, Select, OrderBy সব ডেলিগেট/Func নেয়)
- Async কলব্যাক