C\#의뢰 에 대한 심도 있 는 분석

4326 단어 C\#의뢰
1.의뢰 의 정의
의뢰 는 데이터 형식 으로 볼 수 있 으 며 변수 가 받 아들 일 수 있 는 값 을 정의 하 는 데 사용 할 수 있 는 방법 은 하나의 방법 일 수 있 습 니 다.
의뢰 간단 한 예시:

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

좋은 웹페이지 즐겨찾기