C # delegado (delegado)
C # Principal (Delegado) semelhante ao C ou C ++ ponteiro de função.Principal (Delegado), existe um método para um tipo de referência referências de variáveis.Referência pode ser alterado em tempo de execução.
Principal (Delegado) destina-se especificamente para eventos e métodos de retorno de chamada. Todos delegado (delegado) são derivados da classeSystem.Delegate.
DECLARAÇÃO DA COMISSÃO (Delegado)
declaração de procuração determina o método pode ser referenciado pelo delegado. Delegado pode apontar para um método que tenha o mesmo marcador.
Por exemplo, suponha que você tenha um delegado:
Delegado público MyDelegate int (string s);
A comissão acima pode ser usado para se referir a qualquer método que leva um único parâmetro decadeiae retorna uma variável do tipoint.
A sintaxe para declarar encomendado como segue:
delegado <tipo de retorno> <delegado-name> <lista de parâmetros>
Exemplos da Comissão (Delegado)
Uma vez declarado um tipo delegado, objeto de delegação deve usar anova palavra-chave para criar e, com um determinado métodos.Quando você cria um parâmetro delegado passado para anova declaração como uma chamada de método, como a escrita, mas sem argumentos.Por exemplo:
Delegado público printString void (string s); ... PrintString PS1 = new printString (WriteToScreen); PrintString ps2 = new printString (WriteToFile);
O exemplo a seguir demonstra a declaração da Comissão, instanciar e usar, o delegado pode ser usado para fazer referência método com um argumento inteiro e retorna um valor inteiro.
using System; delegar int NumberChanger (int n); DelegateAppl namespace { classe TestDelegate { int num estática = 10; public static int AddNum (int p) { Num + = p; retornar num; } public static int MultNum (int q) { Num * = q; retornar num; } int public static getNum () { retornar num; } static void Main (string [] args) { // Criar uma instância de delegado NumberChanger nc1 = new NumberChanger (AddNum); NumberChanger NC2 = new NumberChanger (MultNum); // Chamar o método utilizando um nc1 delegado objeto (25); Console.WriteLine ( "Valor de Num: {0}", getNum ()); NC2 (5); Console.WriteLine ( "Valor de Num: {0}", getNum ()); Console.ReadKey (); } } }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
Valor das Num: 35 Valor das Num: 175
multicast encomendado (multicasting de um delegado)
objeto de delegação pode usar o operador "+" para mesclar. Um delegado de chamá-lo mesclar mesclar dois delegados. Apenas o mesmo tipo de confiança pode ser combinado. "-" Do operador pode ser usada para remover o componente do delegado delegado combinado.
Utilize este recurso útil encomendado, você pode criar uma lista de delegado chama o método quando ele é chamado para invocar. Isso é chamado demulticast delegada (multicasting),também conhecido como multicasting. O programa a seguir demonstra um delegado multicast:
using System; delegar int NumberChanger (int n); DelegateAppl namespace { classe TestDelegate { int num estática = 10; public static int AddNum (int p) { Num + = p; retornar num; } public static int MultNum (int q) { Num * = q; retornar num; } int public static getNum () { retornar num; } static void Main (string [] args) { // Criar uma instância de delegado NumberChanger nc; NumberChanger nc1 = new NumberChanger (AddNum); NumberChanger NC2 = new NumberChanger (MultNum); nc = nc1; nc + = NC2; // Chamada nc multicast (5); Console.WriteLine ( "Valor de Num: {0}", getNum ()); Console.ReadKey (); } } }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
Valor das Num: 75
Principais (representante) usos
O exemplo a seguir demonstra o uso de delegação.printStringprincipal ser usado para fazer referência método com uma string como entrada e não retorna nada.
Nós usamos este delegado para chamar os dois métodos, a primeira corda impressa no console, e a segunda cadeia para imprimir em um arquivo:
using System; usando System.IO; DelegateAppl namespace { classe PrintString { fs FileStream estático; sw StreamWriter estático; // Declaração de procuração delegado public void printString (string s); // Este método imprime o console pública WriteToScreen static void (string str) { Console.WriteLine ( "The String é: {0}", str); } // Este método imprime para arquivar WriteToFile public static void (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 (); } // Este método o delegado como parâmetro, e usá-lo para chamar o método sendString public static void (PrintString ps) { ps ( "Olá Mundo"); } static void Main (string [] args) { PrintString PS1 = new printString (WriteToScreen); PrintString ps2 = new printString (WriteToFile); sendString (PS1); sendString (PS2); Console.ReadKey (); } } }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
A String é: Olá Mundo