Looking for c# Keywords? Try Ask4Keywords

C# Language делегат


пример

Делегаты - это типы, которые представляют собой ссылку на метод. Они используются для передачи методов в качестве аргументов другим методам.

Делегаты могут хранить статические методы, методы экземпляра, анонимные методы или лямбда-выражения.

class DelegateExample
{
    public void Run()
    {
        //using class method
        InvokeDelegate( WriteToConsole ); 
        
        //using anonymous method
        DelegateInvoker di = delegate ( string input ) 
        { 
            Console.WriteLine( string.Format( "di: {0} ", input ) );
            return true; 
        };
        InvokeDelegate( di ); 
        
        //using lambda expression
        InvokeDelegate( input => false ); 
    }

    public delegate bool DelegateInvoker( string input );

    public void InvokeDelegate(DelegateInvoker func)
    {
        var ret = func( "hello world" );
        Console.WriteLine( string.Format( " > delegate returned {0}", ret ) );
    }

    public bool WriteToConsole( string input )
    {
        Console.WriteLine( string.Format( "WriteToConsole: '{0}'", input ) );
        return true;
    }
}

При назначении метода делегату важно отметить, что метод должен иметь одинаковый тип возвращаемого значения, а также параметры. Это отличается от «нормального» перегрузки метода, где только параметры определяют сигнатуру метода.

События создаются поверх делегатов.