Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc
Titulní Blogy Fotky Soubory

René Stein

Názory vzešlé z mesaliance humanitní skepse a technologického optimismu

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?

Zveřejněno Tuesday, October 26, 2004 7:50 PM by rene

Komentář

 

Andrej napsal:

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.
October 26, 2004 8:59 PM
 

Michal napsal:

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 to nejake lehke :-)
October 26, 2004 9:04 PM
 

Michal napsal:

a tak, andrej byl rychlejsi :-)
October 26, 2004 9:05 PM
 

Rene napsal:

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 presto chcete ziskat oba vysledky?
Michale, kdy moje hadanky nebyly pro tebe jednoduche? :) Jen snad, kdyz jsem je formatoval jako poezii :))
October 26, 2004 9:21 PM
 

MirekM napsal:

Delegate[] adl = operation.GetInvocationList();
foreach(CallOperation co in adl)
{
result = co( 2, 2);
Console.WriteLine(result);
}

October 27, 2004 6:39 AM
 

ernest napsal:

1) ja myslel, ze .NET Framework nezarucuje poradi, v jakem jsou delegati vyvolavani
2) diky za tip, to se urcite shodi
October 27, 2004 6:46 AM
 

Rene napsal:

To MirekM: Ano presne tak.
October 27, 2004 7:17 AM
 

Marek napsal:

Tyhle hadanky nemaji chybu!
October 27, 2004 5:32 PM
Neregistrovaní uživatele nemužou přidávat komentáře.
Powered by Community Server (Personal Edition), by Telligent Systems