>  기사  >  백엔드 개발  >  C# 대리자

C# 대리자

WBOY
WBOY원래의
2024-09-03 15:29:52594검색

C# 대리자는 코드에서 이벤트나 콜백을 처리하려는 경우 또는 함수에 다른 데이터 유형의 매개변수가 두 개 이상 있지만 매개변수가 아닌 함수 자체를 전달하려는 경우 중요한 역할을 합니다. . 이 경우 대리자는 함수에 대한 포인터처럼 작동하고 참조 데이터 유형이므로 메서드의 참조를 보유하기 때문에 그림에 나타납니다. 대리인은 C#의 System.Delegates 클래스의 일부입니다. C 및 C++ 프로그래밍의 함수 포인터와 유사합니다.

구문

C에서 대리자를 선언하는 구문을 살펴보겠습니다. #

<access modifier> delegate < return type > < delegate_name > ( <parameters>)

설명: 위 구문에서 액세스 수정자는 공개, 비공개 또는 보호될 수 있으므로 대리자를 선언하기 전에 선언해야 합니다. 이제 대리자를 선언하려면 대리자 키워드와 함수 반환 유형을 사용해야 합니다. 예를 들어

public delegate void Show ( char ch );

위에 사용된 show 대리자는 Show() 함수와 연관된 동일한 매개변수 및 반환 유형을 갖는 모든 메소드를 가리키는 데 사용됩니다.

C# 대리자 구현 예

아래는 언급된 예시입니다L

예시 #1

싱글 캐스트 델리게이트의 작업을 시연하는 코드:

코드:

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 () ;
}
}

출력 :

C# 대리자

설명: 위 코드에서 SD 클래스의 정적 메서드 text_show()를 삭제_func()에 할당한 다음 SD 클래스의 정적 메서드 text_display()를 할당하여 Delete_func를 위임한 것을 볼 수 있습니다. () new 연산자를 사용합니다. 또한 위임 기능을 할당하는 데 두 가지 방법을 모두 사용할 수 있습니다. 따라서 처음에는 SD 클래스의 인스턴스를 생성하고 클래스가 있는 위임을 의미하는 위임자에 print() 메서드를 할당했습니다. 결국 우리 코드에서 생성한 함수를 하나씩 호출할 수 있도록 SD 클래스용 객체를 생성하게 되었습니다.

예시 #2

더블 캐스트 델리게이트의 작업을 시연하는 코드:

코드:

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);
}
}
}

출력:

C# 대리자

설명: 위 코드에서 단일 캐스트 대리자와는 다른 이중 캐스팅 대리자를 사용하고 있음을 알 수 있습니다. 우리는 Edu라는 이름의 클래스를 선언했고 이 클래스는 두 개의 대리자를 선언했습니다. 하나는 두 개의 정수를 더하기 위한 것이고 다른 하나는 한 번에 두 개의 주어진 정수를 빼기 위한 것입니다. 그 후 추가 대리자의 결과를 저장하기 위한 total 메서드를 선언했습니다. 같은 방식으로 빼기 대리자의 결과를 저장하기 위한 메서드를 하나 더 선언했습니다. 메인 클래스에서는 주어진 두 정수에 대해 덧셈과 뺄셈을 수행하는 함수에 대리자를 호출할 수 있도록 Edu 클래스의 객체를 생성합니다. 값을 전달하고 결과를 받아보겠습니다.

예시 #3

익명 대리인의 작업을 보여주는 코드:

코드:

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#에서 메서드 매개변수에 이름을 지정하는 것과 비슷합니다.

위 내용은 C# 대리자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:C#에서 어설션다음 기사:C#에서 어설션