\


 Tuesday, 09 November 2004
Další listopadové úterý s programátorskou hádankou

Hádanka Dokážete (opět bez spuštění programu ;) ) určit, co vypíše tento program, a zdůvodnit jeho chování?

 
 
 
using System;
namespace RSTein.Blog
{
    struct NumberStruct
    {
        public int Number;
    }
    
    
    public class Test 
    {
        private  static Object Add(Object obj) 
        {
        
            if (obj is NumberStruct)
            {
                NumberStruct numb = (NumberStruct) obj;
                numb.Number += 1;
                return numb;
                
            }
            
            return obj;
        
        }
        public static void Main()
        {
            NumberStruct numberStruct = new NumberStruct();
            numberStruct.Number = 10;
            
            Object retNumberStructObject = Add(numberStruct);
            object originalStructObject =  numberStruct;
            
            Console.WriteLine(numberStruct.Number);
            Console.WriteLine(((NumberStruct)retNumberStructObject).Number);
            Console.WriteLine((originalStructObject == retNumberStructObject));
            Console.Read();
        }
    }

}


Tuesday, 09 November 2004 09:16:00 (Central Europe Standard Time, UTC+01:00)       
Comments [7]  Programátorské hádanky


Tuesday, 19 July 2005 11:01:24 (Central Europe Standard Time, UTC+01:00)
Zdravim,
vysledky budou podle me 10, 11 a false.
Duvod:
Struktury jsou hodnotove typy a jako takove se predavaji hodnotou, i kdyz maji predka Object.
Takze zmena struktury uvnitr metody neovlivni puvodni hodntu.
Tuesday, 19 July 2005 11:01:24 (Central Europe Standard Time, UTC+01:00)
Vysledky budou presne takove, jak rikate, excelentne rychla odpoved ;)
Ale to zduvodneni by mohlo byt presnejsi...
Tuesday, 19 July 2005 11:01:24 (Central Europe Standard Time, UTC+01:00)
Taky jsem chtel napsat

10,11,false

struktura se nepredava jako odkay, ale kopiruje se, proto ymena neovlivni hodnotu parametru
Tuesday, 19 July 2005 11:01:24 (Central Europe Standard Time, UTC+01:00)
Jeste bych doplnil, aspon doufam ze to tak je :)
Kdyz vytvorim instanci struktury, tak se alokuje na zasobniku. Potom ji predam jako typ Object metode a dojde k boxingu a struktura se mi prekopiruje na haldu, kde s mi potom metoda pracuje. Proto ...
Tuesday, 19 July 2005 11:01:24 (Central Europe Standard Time, UTC+01:00)
Ano, jen doplnim/upravim vase vyjadreni. Pri kazdem prirazeni struktury do promenne typu object (boxingu)je vytvorena nova struktura.
U struktur take nemuzeme hovorit o identite objektu - kazdy objekt obalujici strukturu je v prikladu nezavislou ...
Tuesday, 19 July 2005 11:01:24 (Central Europe Standard Time, UTC+01:00)
Jen bych se chtel optat, jestli je nejaky rozdil pri definovani typu navratove hodnoty u metody jako Object nebo object, String nebo string?
Tuesday, 19 July 2005 11:01:25 (Central Europe Standard Time, UTC+01:00)
To Robert:
Ne neni,
object v C# je jen alias pro System.Object, int pro System.Int32.
Pouziti jednoho nebo druheho nazvu zavisi na zvyklostech vasich ci firmy, kde jste zamestnan
Comments are closed.