C\#의뢰 분석(Delegate)
의뢰(Delegate)는 특히 이벤트 와 리 셋 방법 을 실현 하 는 데 사용 된다.모든 의뢰(Delegate)는 System.Delegate 류 에서 파생 됩 니 다.
성명 의뢰(Delegate)
위탁 성명 은 이 위탁 에서 인용 할 수 있 는 방법 을 결정 했다.의뢰 는 같은 라벨 을 가 진 방법 을 가리 킬 수 있 습 니 다.
예 를 들 어 의뢰 가 있다 고 가정 하면:
public delegate int MyDelegate (string s);
위의 의뢰 는 하나의 string 인 자 를 가 진 모든 방법 을 참조 하고 int 형식 변 수 를 되 돌려 주 는 데 사 용 됩 니 다.설명 의뢰 의 문법 은 다음 과 같 습 니 다.
delegate <return type> <delegate-name> <parameter list>
정례 화 의뢰(Delegate)의뢰 유형 이 밝 혀 지면 의뢰 대상 은 new 키 워드 를 사용 하여 만들어 야 하 며 특정한 방법 과 관련 이 있 습 니 다.의뢰 를 만 들 때 new 문 구 를 전달 하 는 매개 변 수 는 방법 호출 처럼 쓰 지만 매개 변 수 는 없습니다.예 를 들 면:
public delegate void printString(string s);
...
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
아래 의 실례 는 의뢰 의 성명,실례 화,사용 을 보 여 줍 니 다.이 의뢰 는 정형 파 라미 터 를 가 진 방법 을 인용 하여 정형 값 을 되 돌려 줍 니 다.
using System;
delegate int NumberChanger(int n);
namespace DelegateAppl
{
class TestDelegate
{
static int num = 10;
public static int AddNum(int p)
{
num += p;
return num;
}
public static int MultNum(int q)
{
num *= q;
return num;
}
public static int getNum()
{
return num;
}
static void Main(string[] args)
{
//
NumberChanger nc1 = new NumberChanger(AddNum);
NumberChanger nc2 = new NumberChanger(MultNum);
//
nc1(25);
Console.WriteLine("Value of Num: {0}", getNum());
nc2(5);
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey();
}
}
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.Value of Num: 35
Value of Num: 175
의뢰 한 멀티캐스트(Multicasting of a Delegate)
의뢰 대상 은"+"연산 자 를 사용 하여 합병 할 수 있 습 니 다.합병 의뢰 가 합 쳐 진 두 개의 의뢰 를 호출 합 니 다.같은 유형의 의뢰 만 합 칠 수 있 습 니 다."-"연산 자 는 통합 의뢰 에서 구성 요소 의뢰 를 제거 하 는 데 사용 할 수 있 습 니 다.
의뢰 의 이 유용 한 특징 을 사용 하면 의뢰 가 호출 될 때 호출 할 방법의 호출 목록 을 만 들 수 있 습 니 다.이 는 의뢰 한 멀티캐스트(multicasting)라 고도 불 리 며 멀티캐스트 라 고도 부른다.다음 프로그램 은 의뢰 한 멀티캐스트 를 보 여 줍 니 다.
using System;
delegate int NumberChanger(int n);
namespace DelegateAppl
{
class TestDelegate
{
static int num = 10;
public static int AddNum(int p)
{
num += p;
return num;
}
public static int MultNum(int q)
{
num *= q;
return num;
}
public static int getNum()
{
return num;
}
static void Main(string[] args)
{
//
NumberChanger nc;
NumberChanger nc1 = new NumberChanger(AddNum);
NumberChanger nc2 = new NumberChanger(MultNum);
nc = nc1;
nc += nc2;
//
nc(5);
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey();
}
}
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.Value of Num: 75
위탁(Delegate)의 용도
아래 의 실례 는 위탁 의 용법 을 보 여 주 었 다.printString 에 의뢰 하면 문자열 을 입력 하 는 방법 으로 사용 할 수 있 으 며 아무것도 되 돌려 주지 않 습 니 다.
우 리 는 이 의뢰 를 사용 하여 두 가지 방법 을 호출 합 니 다.첫 번 째 는 콘 솔 에 문자열 을 인쇄 하고 두 번 째 는 파일 에 문자열 을 인쇄 합 니 다.
using System;
using System.IO;
namespace DelegateAppl
{
class PrintString
{
static FileStream fs;
static StreamWriter sw;
//
public delegate void printString(string s);
//
public static void WriteToScreen(string str)
{
Console.WriteLine("The String is: {0}", str);
}
//
public static void WriteToFile(string s)
{
fs = new FileStream("c:\\message.txt", FileMode.Append, FileAccess.Write);
sw = new StreamWriter(fs);
sw.WriteLine(s);
sw.Flush();
sw.Close();
fs.Close();
}
// ,
public static void sendString(printString ps)
{
ps("Hello World");
}
static void Main(string[] args)
{
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
sendString(ps1);
sendString(ps2);
Console.ReadKey();
}
}
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.The String is: Hello World
이상 은 C\#의뢰(Delegate)의 상세 한 내용 을 분석 하 는 것 입 니 다.C\#의뢰(Delegate)에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.