C\#의뢰 에 대한 심도 있 는 분석
4326 단어 C\#의뢰
의뢰 는 데이터 형식 으로 볼 수 있 으 며 변수 가 받 아들 일 수 있 는 값 을 정의 하 는 데 사용 할 수 있 는 방법 은 하나의 방법 일 수 있 습 니 다.
의뢰 간단 한 예시:
namespace DelegateDemo
{
class Program
{
public delegate int MathOptDelegate(int value1,int value2);
public int add(int value1, int value2)
{
return value1 + value2;
}
static void Main(string[] args)
{
MathOptDelegate mod;
Program p = new Program();
mod =p.add;
Console.WriteLine(mod(3,5));
Console.ReadKey();
}
}
}
의뢰 의 구조 함 수 를 이용 하여 의뢰
namespace DelegateDemo
{
class Program
{
public delegate int MathOptDelegate(int value1,int value2);
public int add(int value1, int value2)
{
return value1 + value2;
}
static void Main(string[] args)
{
Program p = new Program();
MathOptDelegate mod = new MathOptDelegate(p.add);
Console.WriteLine(mod(3,5));
Console.ReadKey();
}
}
}
를 만 드 는 것 은 이 예시 에서 이러한 직관 적 인 인상 을 얻 을 수 있다.의뢰 는 하나의 방법의 용기 라 고 할 수 있 으 며,어떤 구체 적 인 방법 을 넣 으 면 그것 을 방법 처럼 사용 할 수 있다.
2.의뢰 한 호출 목록
이전 예 에서 볼 때 위탁 변 수 는 특정한 방법 을 인용 할 수 있 고 호출 하면 이 방법 을 호출 하 는 것 과 같다.
의뢰 가 올해 방법 호출 의 또 다른 형식 이 라면 굳이 의뢰 라 는 특성 을 도입 할 필요 가 있 겠 는가?직접 호출 하 는 방법 이 더 간단명료 하지 않 습 니까?
위탁 변 수 는 다른 방법 을 인용 할 수 있 을 뿐만 아니 라 여러 방법 을 조합 하여 대량으로 실행 할 수 있 기 때문이다.
namespace DelegateDemo2
{
class Program
{
public delegate void MyDelegate(String str);
public static void hello(String str)
{
Console.WriteLine(str+" ");
}
public static void goodbye(String str)
{
Console.WriteLine(str+" ");
}
static void Main(string[] args)
{
MyDelegate a,b,c,d;
a = Program.hello;
a("a");
b = Program.goodbye;
b("b");
c = a + b;//
c("c");// c c
d = c - a;
d("d");//d
Console.ReadKey();
}
}
}
C 와 같은 위탁 변 수 는 다 중 위탁 변수 라 고 할 수 있다.하나의 위탁 변 수 를 다 중 위탁 변수 로 조합 할 수 있 습 니 다.유사 한 것 은 감법 연산 자 를 사용 하여 다 중 의뢰 변수 에서 의뢰 변 수 를 제거 할 수도 있 습 니 다.
namespace DelegateDemo2
{
class Program
{
public delegate void MyDelegate(String str);
public static void hello(String str)
{
Console.WriteLine(str+" ");
}
public static void goodbye(String str)
{
Console.WriteLine(str+" ");
}
static void Main(string[] args)
{
MyDelegate a,b,c,d;
a = Program.hello;
a("a");
b = Program.goodbye;
b("b");
c = a + b;//
c("c");// c c
d = c - a;
d("d");//d
Delegate[] ds;
ds = c.GetInvocationList();
foreach(Delegate s in ds)
{
Console.WriteLine(s);
//DelegateDemo2.Program+MyDelegate
//DelegateDemo2.Program+MyDelegate
}
Console.WriteLine(ds.Length);
Console.ReadKey();
}
}
}
의뢰 정의 방법 에 반환 값 이 있 으 면 다 중 의뢰 변수의 반환 값 은 의뢰 호출 목록 의 마지막 방법의 반환 값 이 고 중간 호출 방법 반환 값 은 버 려 집 니 다.일반 의뢰 사용:
Func 시리즈 의뢰
다음은 Func 가 의뢰 의 정 의 를 껐 습 니 다.일반적인 유형의 매개 변수 에 따라 여러 개의 과부하 형식 이 있 습 니 다.
public delegate TResult Func
public delegate TResult Func