C# 대리자 및 멀티캐스트 대리자 소개
9461 단어 dotnetcsharpprogrammingtutorial
C# 대리자란 무엇입니까?
C# 대리자는 메서드와 해당 서명을 정의하는 참조 데이터 형식입니다. 대리자는 하나 이상의 메서드 주소를 저장합니다. 메서드에 대한 대리자가 할당되면 메서드와 똑같이 작동합니다. 매개 변수와 반환 값이 있는 다른 메서드처럼 호출할 수 있습니다. 대리자는 반환 형식 및 매개 변수 목록과 같은 서명이 동일한 메서드 참조를 저장하기만 하면 됩니다. 대리자는 대리자에 대한 개체를 만들어 클래스처럼 호출할 수 있습니다. 대리자 개체를 사용하면 직접 호출하지 않고 런타임에 메서드를 실행할 수 있습니다.
이 게시물은 원래 DevelopersDoors에 게시되었습니다.
대리자의 사용법:
이벤트를 사용해야 하는 경우 대리자를 사용할 수 있습니다. 멀티캐스트 대리자는 한 번에 많은 이벤트를 호출하는 데 사용할 수 있습니다. 클래스에 메서드 구현이 두 개 이상 필요하고 정적 메서드를 캡슐화해야 하는 경우.
대리자 및 인터페이스를 사용하는 경우 참조 -> https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/ms173173(v=vs.100)
대리인 선언:
System.Delegate
클래스는 대리자 선언의 기본 클래스입니다. delegate 키워드는 대리자를 선언하는 데 사용됩니다. 반환 유형 및 매개 변수는 메서드와 동일해야 합니다.예:
public delegate int CalDelegate(int num1,int num2);
인스턴스화 및 대리자 호출:
대리자를 인스턴스화하기 위해 클래스 인스턴스가 생성되는 방식과 유사하게 인스턴스가 생성됩니다. 대리자가 인스턴스화되면 메서드의 주소가 인스턴스에 저장됩니다.
예:
Calculator cal=new Calculator();
CalDelegate sumDel=new CalDelegate(cal.sum);
CalDelegate mulDel=new CalDelegate(cal.multiply);
CalDelegate
는 생성된 대리자이고 sumDel
는 cal 인스턴스의 CalDelegate
메서드를 참조하여 sum()
로 인스턴스화된 대리자 인스턴스이며 mulDel
는 multiply()
메서드를 참조하기 위한 것입니다.대리자를 호출하려면 동일한 데이터 형식의 대리자가 참조하는 매개 변수 목록을 사용하여 대리자 인스턴스를 호출합니다.
예:
sumDel(10, 12);
mulDel(10,12);
using System;
public delegate int CalDelegate(int num1,int num2);
public class Calculator
{
public int sum(int num1,int num2)
{
return num1+num2;
}
public int multiply(int num1,int num2)
{
return num1*num2;
}
}
public class Program
{
public static void Main()
{
Calculator cal=new Calculator();
CalDelegate sumDel=new CalDelegate(cal.sum); // sumDel for sum() reference
CalDelegate mulDel=new CalDelegate(cal.multiply); //mulDel for multiply() reference
Console.WriteLine(sumDel(10,12));
Console.WriteLine(mulDel(10,12));
}
}
산출:
22
120
멀티캐스트 대리자:
대리자 멀티캐스트 대리자에서 둘 이상의 메서드에 대한 참조가 사용됩니다. 이것은 주로 다중 이벤트 호출에 사용됩니다. += 연산자는 대리자에 참조되는 메서드를 추가하는 데 사용되며 -= 연산자는 메서드를 제거하는 데 사용됩니다. 메서드는 FIFO(선입 선출) 순서로 호출됩니다.
멀티캐스트 대리자를 사용할 때 여러 메서드를 사용하면 반환 형식이 충돌하므로 void를 반환 형식으로 사용한다는 점을 기억하세요. 따라서 void는 런타임 예외를 피하기 위해 안전합니다.
예:
CalDelegate simpleDel=new CalDelegate(cal.sum);
simpleDel += new CalDelegate(cal.multiply);
simpleDel -= new CalDelegate(cal.sum);
using System;
public delegate void CalDelegate(int num1,int num2);
public class Calculator
{
public void sum(int num1,int num2)
{
Console.WriteLine(num1+num2);
}
public void multiply(int num1,int num2)
{
Console.WriteLine(num1*num2);
}
}
public class Program
{
public static void Main()
{
Calculator cal=new Calculator();
CalDelegate simpleDel=new CalDelegate(cal.sum);
simpleDel+=new CalDelegate(cal.multiply); //multicasting using += operator
simpleDel(10,12);
}
}
산출:
22
120
위의 대리자 예제는 첫 번째
sum()
메서드가 simpleDel
대리자를 참조하는 멀티캐스트 대리자와 함께 사용됩니다. 그런 다음 multiply()
연산자를 사용하여 멀티캐스트에 +=
메서드가 추가됩니다. 대리자에서 메서드를 제거하려면 -=
연산자를 사용하면 됩니다. 멀티캐스트 델리게이트가 FIFO에서 실행되는 것처럼 첫 번째sum()
델리게이트 참조가 실행된 다음multiply()
출력 22와 120이 각각 실행됩니다.대리인에 대한 문서는 -> https://docs.microsoft.com/en-in/dotnet/api/system.delegate?view=netcore-3.1를 참조하십시오.
다음 포스트에서는 동기 델리게이트, 비동기 델리게이트, 공분산 델리게이트와 반공변 델리게이트에 대해 설명하겠습니다.
내 다른 C# 아카이브의 경우 -> Go .
내 게시물이 마음에 들면 공유하고 제안 사항이 있으면 댓글을 달아주세요.
Reference
이 문제에 관하여(C# 대리자 및 멀티캐스트 대리자 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ajeetht/introduction-to-c-delegate-and-multicast-delegate-4fpk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)