\

Školení Návrhové vzory, OOP a UML


 Tuesday, October 26, 2004
Další úterý s programátorskou hádankou
Máte tento kód:
using System;
namespace Blog.Test
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class DelegateTest
    {
        public delegate int CallOperation (int x, int y);
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            CallOperation operation = new CallOperation(Add);
            operation += new CallOperation(Substract);
            int result = operation( 2, 2);
            Console.WriteLine(result);
            Console.Read();
        }

        public static int Add(int x, int y)
        {
            return (x + y);
        }
        public static int Substract(int x, int y)
        {
            return (x - y);
        }
    }
}

Otázka 1) Dokážete bez spuštění programu říct, jaký výsledek bude v proměnné result a proč?

Otázka 2) Umíte přepsat tento kód tak, abyste dostali návratové hodnoty z obou metod, na něž ukazuje kompozitní delegát?



Tuesday, October 26, 2004 6:50:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [8]  Programátorské hádanky


Tuesday, July 19, 2005 11:01:25 AM (Central Europe Standard Time, UTC+01:00)
1) Podla mna 0. navratova hodnota je z poslednej metody. A Substract bol pridany na koniec.

2) Asi by som pridal ref parameter(nejake pole) kam by tie metody ukladali vysledky.
Tuesday, July 19, 2005 11:01:25 AM (Central Europe Standard Time, UTC+01:00)
1) 0.
2)
static void Main(string[] args)
{
CallOperation operation = new CallOperation(Add);
Console.WriteLine(operation( 2, 2));

operation += new CallOperation(Substract);
int result = operation( 2, 2);
.....
}

divim se, ze jsem prvni.
Dneska je ...
Tuesday, July 19, 2005 11:01:25 AM (Central Europe Standard Time, UTC+01:00)
a tak, andrej byl rychlejsi :-)
Tuesday, July 19, 2005 11:01:25 AM (Central Europe Standard Time, UTC+01:00)
Ano vysledek bude 0 - vracena je nvratova hodnota posledniho delegata.
Reseni s polem(Andrej) i s postupnym skladanim (Michal) je mozne.
Ale co kdyz jiz mate hotoveho (ne postupne skladaneho) kompozitniho delegata se signaturou, jakou jsem napsal a ...
Tuesday, July 19, 2005 11:01:25 AM (Central Europe Standard Time, UTC+01:00)
Delegate[] adl = operation.GetInvocationList();
foreach(CallOperation co in adl)
{
result = co( 2, 2);
Console.WriteLine(result);
}

Tuesday, July 19, 2005 11:01:25 AM (Central Europe Standard Time, UTC+01:00)
1) ja myslel, ze .NET Framework nezarucuje poradi, v jakem jsou delegati vyvolavani
2) diky za tip, to se urcite shodi
Tuesday, July 19, 2005 11:01:25 AM (Central Europe Standard Time, UTC+01:00)
To MirekM: Ano presne tak.
Tuesday, July 19, 2005 11:01:25 AM (Central Europe Standard Time, UTC+01:00)
Tyhle hadanky nemaji chybu!
Comments are closed.