[Girar] C # delegado (Func, Acción)

Dirección original:
https://cloud.tencent.com/developer/article/1335104

1, el uso de Func (método de encapsulación, pasar parámetros, valor de retorno)

Func <en T1, T2, ..., fuera TResult> (T1, T2, ...)  

Un método de envasado que tiene (0/1/2/3 ... 16) parámetros , y devuelve el valor del tipo especificado por el parámetro TResult.

 

pública  estática  sin efecto la Principal () 
        { 
            // Método a: sistema equivalente construido Func delegado 
            Func < int , int , cadena > Método = el Calcular; 

            // Método dos: Lambda implementado llamada a un método, más simple 
            Func < int , int , Cadena > método - 1 = (X, Y) => 
            { 
                int Val = X + Y;
                 retorno  de cuerdas .formato ( "el PLUS el Calcular {{0}} 1 resultado es: {2} " , X, Y, Val); 
            }; 

            Console.WriteLine (método (3 , 5 )); 
            Console.WriteLine (method_1 ( 10 , 18 )); 
            Console.ReadLine (); 
        } 


        Pública  estática  cadena Calcular ( int x, int y) 
        { 
            int val = x + y;
            retorno  cadena .formato ( " el calculo {0} más {1} resultado es: {2} " , x, y, val); 
        }

 

2, Acción de uso (un método de envasado, paso de parámetros y vuelve sin valor)

 Acción <T1, T2, T3, ...> (T1, T2, T3 ...)

Un método de envasado que entrante (0/1/2 ...) parámetros y no devuelve ningún valor.

 pública  estática  vacío Principal () 
        { 
            Method_First ( " Hola, aquí! " ); 
            Method_First ( " Hola, No! " ); 

            Console.ReadLine (); 
        } 

        Privada  estática  vacío Method_First ( cadena y) 
        { 
            Acción < string > método; 
            método = x => {Console.WriteLine ( " el mensaje de entrada es: {0} " , x); }; 
            método (y); 
        } 

        privada estático  void Method_Sec ( cadena y) 
        { 
            Acción < cadena > method = x => {Console.WriteLine ( " el mensaje de entrada es: {0} " , x); }; 
            método (y); 
        }

 

3. El uso de delegado

Dijo a encargado dos situaciones diferentes, a continuación, cuándo usarlo encargó?

De acuerdo a los documentos oficiales, en las siguientes situaciones, por favor utilice la comisión:

  • Cuando el patrón de diseño de eventos.
  • Cuando el método de envasado preferiblemente estática.
  • Otras propiedades del objeto cuando la persona que llama no necesitan tener acceso a la realización del método, un método o una interfaz.
  • Tenemos que facilitar la combinación.
  • Cuando puede ser necesaria una pluralidad de clases para implementar el método.

4. Utilice la delegación de tareas

Tarea representa una operación asíncrona.

pública  estática  vacío Principal () 
        { 
            // 启动方法1 
            Tarea t = Task.Run (() =>  
            { 
                Thread.Sleep ( 1000 ); 
                Console.WriteLine ( " Primera tarea de tiempo de acabado es: {0} " , DateTime.Now .ToString ()); 
            }); 


            // 方法2 
            Tarea t_2 = Task.Factory.StartNew (() => { 
                Thread.Sleep ( 2000 ); 
                Console.WriteLine ( " segunda tarea vez terminado es: {0} " , DateTime.Now.ToString ()); 
            });


            // 方法3 
            acción Action = () => 
            { 
                Thread.Sleep ( 3000 ); 
                Console.WriteLine ( " tercera tarea vez terminado es: {0} " , DateTime.Now.ToString ()); 
            }; 
            Task.Factory.StartNew (acción) .ContinueWith (thirdTask => 
            { 
                si (thirdTask.IsCompleted) 
                { 
                    Console.WriteLine ( " la tercera tarea ha terminado " ); 
                } 
                demás  si (thirdTask.IsFaulted) 
                {
                    Console.WriteLine (thirdTask.Exception); 
                } 
            }); 

            Console.WriteLine ( " hilo principal tiene final: {0} " , DateTime.Now.ToString ()); 

            Console.ReadKey (); 
        }

Los resultados son los siguientes: 

hilo principal tiene final: 03/04/2018 22:03:39

La primera tarea vez terminado es: 03/04/2018 22:03:40

La segunda tarea es el tiempo final: 03/04/2018 22:03:41

tercera tarea el tiempo final es: 03/04/2018 22:03:42

La tercera tarea ha terminado

 

Supongo que te gusta

Origin www.cnblogs.com/louiszh/p/12665828.html
Recomendado
Clasificación