WebElektronika

Dynamic használata a C# nyelvben

person access_time 2016.08.29.
A C# nyelv erősen típusos, mégis van olyan lehetőség, amikor a típust nem ismerjük futási időben. Nagyon röviden most ezt a lehetőséget tekintjük át.


A .NET4-ben megjelent dynamic kulcsszó segítségével az objektumok dinamikussá tehetők, futási időben ezek az objektumok különböző típusokká konvertálhatók.

Az igaz, hogy a "dynamic" kulcsszó, de használhatjuk változónévként is (pl.: string dynamic = "honlap";). 

Látható tehát az, hogy a dynamic használatát -ahol csak lehet- kerüljük a C# nyelvben, persze, akadnak kivételek. Ilyen a DLR (Dynamic Language Runtime), és az Interop használatát is bemutató cikkben is láttuk, ott is a dynamic került előtérbe.

Írjuk meg a következő programot, amely a dynamic kulcsszó használatát mutatja be. 

class Program
    {
        static void Main(string[] args)
        {
            dynamic i = 10;
            Console.WriteLine("Az i értéke : {0}", i);
            Console.WriteLine("Az i értéke ToString()-gel: {0}", i.ToString());

            i = "WebElektronika";
            Console.WriteLine("Az i értéke stringként : {0}", i);

            dynamic a = 10, b = 20;
            dynamic d = a + b;
            Console.WriteLine("A d értéke : {0}", d);
            Console.WriteLine("A d típusa : {0}", d.GetType());
            dynamic c = "hello";
            d = a + c;
            Console.WriteLine("A d értéke : {0}", d);
            Console.WriteLine("A d típusa : {0}", d.GetType());

            int Eredmeny = a + b;
            Console.WriteLine("Egészként : {0}", Eredmeny);
            Console.WriteLine("dynamic-ként : {0}", (dynamic)Eredmeny);
            
            dynamic datum = System.DateTime.Now;
            Console.WriteLine("Dátum : {0}", datum);
            
            // változóként történő használat
            int dynamic = 5;
            Console.WriteLine("Változóként : {0}", dynamic);

            Console.ReadLine();
        }
    }

 

Először létrehozzuk az "i" változót, amely dynamic típus, és az értéke 10. Ezt kiíratjuk kétszer is, a második esetben használjuk a ToString() metódust is, amelyet "fejből" kell beírnunk, hiszen az Intellisense nem alkalmazható itt.

Ezután az "i" változó új értéket kap, egy string-et. Látjuk tehát, hogy az erősen típusos C# nyelvben az "i" változó típust vált, egészből string lett.
Ezután létrehozunk újabb dynamic típusú változókat (a, b, d), majd kiíratjuk a "d" értékét, illetve a GetType() metódussal a "d" típusát (az "a" és a "d" értéke miatt Int32).
Ezt követően a dynamic típusú "c" egy sztringet kap az értékadásnál és a "d" új értéket kap. Emiatt a "d" típusa megváltozik.

Az int típusú "Eredmeny" változó két dynamic típusú változó értékét kapja meg. Láthatjuk itt, hogy a típuskonverzió létezik itt is, a dynamic-ból Int32 lett.

A dátumot is kiíratjuk, de nem DateTime típusként, hanem dynamic-ként. Végül pedig a dynamic kulcsszót nem típusként, hanem változónévként alkalmazzuk ebben a programban (1. ábra).

kep
1. ábra   Futási eredmény
 

(Címlapkép : https://i-msdn.sec.s-msft.com/dynimg/IC267818.jpeg)