Delegate: GetInvocationList : Chained delegate « delegate « C# / CSharp Tutorial






using System;

public delegate double Compute( double x, double y );

public class Processor
{
    public double Add( double x, double y ) {
        double result = x + y;
        Console.WriteLine( "InstanceResults: {0}", result );
        return result;
    }

    public static double Subtract( double x, double y ) {
        double result = x-y;
        Console.WriteLine( "StaticResult: {0}", result );
        return result;
    }
}

public class MainClass
{
    static void Main() {
        Processor proc1 = new Processor( );
        Processor proc2 = new Processor( );

        Compute[] delegates = new Compute[] {
            new Compute( proc1.Add ),
            new Compute( proc2.Add ),
            new Compute( Processor.Subtract )
        };

        Compute chained = (Compute) Delegate.Combine( delegates );
        Delegate[] chain = chained.GetInvocationList();
        
        
        for( int i = 0; i < chain.Length; ++i ) {
            Compute current = (Compute) chain[i];
            Console.WriteLine(current( 4, 5 ));
        }
        
        
    }
}
InstanceResults: 9
9
InstanceResults: 9
9
StaticResult: -1
-1








9.3.Chained delegate
9.3.1.Chained Delegate
9.3.2.Delegate.Combine
9.3.3.Delegate: GetInvocationList