C# 대리자는 코드에서 이벤트나 콜백을 처리하려는 경우 또는 함수에 다른 데이터 유형의 매개변수가 두 개 이상 있지만 매개변수가 아닌 함수 자체를 전달하려는 경우 중요한 역할을 합니다. . 이 경우 대리자는 함수에 대한 포인터처럼 작동하고 참조 데이터 유형이므로 메서드의 참조를 보유하기 때문에 그림에 나타납니다. 대리인은 C#의 System.Delegates 클래스의 일부입니다. C 및 C++ 프로그래밍의 함수 포인터와 유사합니다.
C에서 대리자를 선언하는 구문을 살펴보겠습니다. #
<access modifier> delegate < return type > < delegate_name > ( <parameters>)
설명: 위 구문에서 액세스 수정자는 공개, 비공개 또는 보호될 수 있으므로 대리자를 선언하기 전에 선언해야 합니다. 이제 대리자를 선언하려면 대리자 키워드와 함수 반환 유형을 사용해야 합니다. 예를 들어
public delegate void Show ( char ch );
위에 사용된 show 대리자는 Show() 함수와 연관된 동일한 매개변수 및 반환 유형을 갖는 모든 메소드를 가리키는 데 사용됩니다.
아래는 언급된 예시입니다L
싱글 캐스트 델리게이트의 작업을 시연하는 코드:
코드:
using System; class Singlecast_Delegates { public delegate void Delete_func() ; public class SD { public static void text_display() { Console.WriteLine ( " Hey hello ! , How are you " ) ; } public static void text_show() { Console.WriteLine ( " Hi ! How is everything ? " ) ; } public void print() { Console.WriteLine ( " Print " ) ; } } static void Main(string[] args) { Delete_func del_var1 = SD.text_show ; Delete_func del_var2 = new Delete_func ( SD.text_display ) ; SD obj = new SD() ; Delete_func del_var3 = obj.print ; del_var1() ; del_var2() ; del_var3() ; Console.ReadLine () ; } }
출력 :
설명: 위 코드에서 SD 클래스의 정적 메서드 text_show()를 삭제_func()에 할당한 다음 SD 클래스의 정적 메서드 text_display()를 할당하여 Delete_func를 위임한 것을 볼 수 있습니다. () new 연산자를 사용합니다. 또한 위임 기능을 할당하는 데 두 가지 방법을 모두 사용할 수 있습니다. 따라서 처음에는 SD 클래스의 인스턴스를 생성하고 클래스가 있는 위임을 의미하는 위임자에 print() 메서드를 할당했습니다. 결국 우리 코드에서 생성한 함수를 하나씩 호출할 수 있도록 SD 클래스용 객체를 생성하게 되었습니다.
더블 캐스트 델리게이트의 작업을 시연하는 코드:
코드:
using System ; namespace Educba { // Here we are declaring the class with name " Edu " class Edu { // In this class we will declare the delegates // Here the return type and parameter type must be same as the return and parameter type // of the 2 methods // "number_addition" and "number_substraction" are 2 given delegate names by user public delegate void number_addition ( int x , int y ) ; public delegate void number_substraction ( int x , int y ) ; // here we are declaring the "total" method public void total ( int x , int y ) { Console.WriteLine( " (50 + 10) = {0} " , x + y ) ; } // here we are declaring the "substraction" method public void substraction ( int x , int y ) { Console.WriteLine( " ( 95 - 30 ) = {0} ", x - y ) ; } // Main Method declaration public static void Main(String []args) { // creating an object " obj " for "Edu" Edu obj = new Edu() ; number_addition delegate1 = new number_addition ( obj.total ) ; number_substraction delegate2 = new number_substraction( obj.substraction ) ; // creating an object of the delegate class named as " delegate1 " // for method "total" and "delegate2" for method "substraction" & // pass the parameter of the 2 methods by class object "obj" // by instantiating the delegates // passing the below values to the methods by declared delegate object delegate1( 50 , 10) ; delegate2( 95 , 30); } } }
출력:
설명: 위 코드에서 단일 캐스트 대리자와는 다른 이중 캐스팅 대리자를 사용하고 있음을 알 수 있습니다. 우리는 Edu라는 이름의 클래스를 선언했고 이 클래스는 두 개의 대리자를 선언했습니다. 하나는 두 개의 정수를 더하기 위한 것이고 다른 하나는 한 번에 두 개의 주어진 정수를 빼기 위한 것입니다. 그 후 추가 대리자의 결과를 저장하기 위한 total 메서드를 선언했습니다. 같은 방식으로 빼기 대리자의 결과를 저장하기 위한 메서드를 하나 더 선언했습니다. 메인 클래스에서는 주어진 두 정수에 대해 덧셈과 뺄셈을 수행하는 함수에 대리자를 호출할 수 있도록 Edu 클래스의 객체를 생성합니다. 값을 전달하고 결과를 받아보겠습니다.
익명 대리인의 작업을 보여주는 코드:
코드:
using System; // declaring delegate method Demo of void type public delegate void Demo() ; // creating a class for declaring a static method inside this class. public class First_Program { static int Main() { Demo Display = delegate() { // displaying the output on the user screen Console.WriteLine ( " Here is the Anonymous delegate method " ) ; }; // Here we are calling the display function. Display() ; return 0 ; } }
출력 :
코더가 메서드를 다른 메서드의 인수로 전달해야 할 때마다 대리자를 사용하거나 대리자는 함수 시그니처를 캡슐화할 수 있는 클래스라고 말할 수 있습니다. 이는 C#에서 메서드 매개변수에 이름을 지정하는 것과 비슷합니다.
위 내용은 C# 대리자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!