xxxxxxxxxx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DelegateDemo : MonoBehaviour {
public delegate void Del(string msg);
void Start(){
Del SampleDel;
SampleDel = PrintMsg;
SampleDel += Debug.Log; //using plus sign we can subscribe multiple methods to trigger events.
SampleDel("Hello Shrinath..."); //when this is called, all the methods subscribed to this delegate gets called
}
void PrintMsg(string msg1){
Debug.Log ("msg : " + msg1);
}
}
xxxxxxxxxx
using System;
public class CargoAircraft
{
// Create a delegate type (no return no arguments)
public delegate void CheckQuantity();
// Create an instance of the delegate type
public CheckQuantity ProcessQuantity;
public void ProcessRequirements()
{
// Call the instance delegate
// Will invoke all methods mapped
ProcessQuantity();
}
}
public class CargoCounter
{
public void CountQuantity() { }
}
class Program
{
static void Main(string[] args)
{
CargoAircraft cargo = new CargoAircraft();
CargoCounter cargoCounter = new CargoCounter();
// Map a method to the created delegate
cargo.ProcessQuantity += cargoCounter.CountQuantity;
// Will call instance delegate invoking mapped methods
cargo.ProcessRequirements();
}
}
}
xxxxxxxxxx
//the delegate can point to a void function and takes a string parameter
delegate void Del(string str);
public void hello(string Name)
{
Console.WriteLine("hello " + Name) ;
}
public static void main()
{
//you need to declare the delegate type above and give it a function
//that matches the delegate's funcion
Del HelloDelegate = new Del(hello);
HelloDelegate("IC");
}
/// (output) -> "hello IC"
xxxxxxxxxx
<access_modifier> delegate <return_type> DelegateName([list_of_parameters]);
xxxxxxxxxx
//A delegate is an object that knows how to call a method.
delegate int Transformer (int x);
//Transformer is compatible with any method
//with an int return type and a single int parameter,
int Square (int x)
{
return x * x;
}
//Or, more tersely:
int Square (int x) => x * x;
//Assigning a method to a delegate variable creates a delegate instance:
Transformer t = Square;
//You can invoke a delegate instance in the same way as a method:
int answer = t(3); // answer is 9
xxxxxxxxxx
using System;
// Example delegate declaration
delegate void OperationDelegate(int a, int b);
public class Calculator
{
public static void Add(int a, int b)
{
Console.WriteLine($"{a} + {b} = {a + b}");
}
public static void Subtract(int a, int b)
{
Console.WriteLine($"{a} - {b} = {a - b}");
}
public static void Multiply(int a, int b)
{
Console.WriteLine($"{a} * {b} = {a * b}");
}
public static void Divide(int a, int b)
{
if (b != 0)
{
Console.WriteLine($"{a} / {b} = {a / b}");
}
else
{
Console.WriteLine("Division by zero is not allowed.");
}
}
}
public class Program
{
public static void Main(string[] args)
{
// Creating instances of the delegate and associating methods
OperationDelegate operation = Calculator.Add;
operation += Calculator.Subtract;
operation += Calculator.Multiply;
operation += Calculator.Divide;
// Invoking the delegate
operation.Invoke(10, 5);
}
}
xxxxxxxxxx
// Declare a delegate with a specific signature
delegate void MyDelegate(string message);
class Program
{
static void Main()
{
// Create an instance of the delegate and associate it with a method
MyDelegate delegateInstance = DisplayMessage;
// Invoke the method via the delegate
delegateInstance("Hello, delegates!");
// You can also use the delegate to invoke different methods
delegateInstance = DisplayAnotherMessage;
delegateInstance("Greetings!");
// Delegates can be combined using the "+" operator
MyDelegate multiDelegate = DisplayMessage;
multiDelegate += DisplayAnotherMessage;
// Invoking a multicast delegate calls all associated methods
multiDelegate("Multiple methods!");
// Delegates can be removed using the "-" operator
multiDelegate -= DisplayMessage;
// Invoking the multicast delegate now calls only one method
multiDelegate("Single method!");
}
static void DisplayMessage(string message)
{
Console.WriteLine("DisplayMessage: " + message);
}
static void DisplayAnotherMessage(string message)
{
Console.WriteLine("DisplayAnotherMessage: " + message);
}
}
xxxxxxxxxx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DelegateTest : MonoBehaviour
{
public delegate void TestDelegate();
private TestDelegate testDelegate;
// Start is called before the first frame update
void Start()
{
testDelegate = MyDelegateFunc;
testDelegate();
}
// Update is called once per frame
void Update()
{
}
private void MyDelegateFunc()
{
Debug.Log("My DelegateFunc");
}
}
xxxxxxxxxx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateApp {
/// <summary>
/// A class to define a person
/// </summary>
public class Person {
public string Name { get; set; }
public int Age { get; set; }
}
class Program {
//Our delegate
public delegate bool FilterDelegate(Person p);
static void Main(string[] args) {
//Create 4 Person objects
Person p1 = new Person() { Name = "John", Age = 41 };
Person p2 = new Person() { Name = "Jane", Age = 69 };
Person p3 = new Person() { Name = "Jake", Age = 12 };
Person p4 = new Person() { Name = "Jessie", Age = 25 };
//Create a list of Person objects and fill it
List<Person> people = new List<Person>() { p1, p2, p3, p4 };
//Invoke DisplayPeople using appropriate delegate
DisplayPeople("Children:", people, IsChild);
DisplayPeople("Adults:", people, IsAdult);
DisplayPeople("Seniors:", people, IsSenior);
Console.Read();
}
/// <summary>
/// A method to filter out the people you need
/// </summary>
/// <param name="people">A list of people</param>
/// <param name="filter">A filter</param>
/// <returns>A filtered list</returns>
static void DisplayPeople(string title, List<Person> people, FilterDelegate filter) {
Console.WriteLine(title);
foreach (Person p in people) {
if (filter(p)) {
Console.WriteLine("{0}, {1} years old", p.Name, p.Age);
}
}
Console.Write("\n\n");
}
//==========FILTERS===================
static bool IsChild(Person p) {
return p.Age < 18;
}
static bool IsAdult(Person p) {
return p.Age >= 18;
}
static bool IsSenior(Person p) {
return p.Age >= 65;
}
}
}