Napisany przez paweltymura on Zainspirowany kolegami z pracy (ale jesteśmy inspirujący ) postanowiłem napisać o dynamic jako elemencie fajnym do napisania ładnego kodu typu Type matching. Możliwe, że jest to też niezła odpowiedź na problem Ayende.
Sztuka programowania 3189 dni, 2 godziny, 50 minut temu 125 źrodło rozwiń
I am not a big fan of dynamic type in C#, however there are certain situations in which it can be handy. Let's assume that we have following piece of code (which I encounter quite often at my work) public abstract class Weapon { //some properties } public class Gun : Weapon { //some properties } // more derived types var weaponService = new WeaponService(); IList
Słowo dynamic jest często nadużywane prowadząc do trudno czytelnego kodu. Innym problemem jest wydajność – programiści często nie wiedzą jaki overhead za sobą ponosi każde użycie dynamic. Zacznijmy eksperymentowanie z IL:staticvoid Main(string[] args) { dynamic text ="Hello world"; } Wygenerowany IL:// Method begins at RVA 0x2050 // Code size 8 (0x8).maxstack 1 .entrypoint .locals init ( [0] object text ) IL0000: nop IL0001: ldstr "Hello world" IL0006: stloc.0 IL0007: ret Nic nadzwyczajn...
The dynamic keyword has been part of the C# language for quite a while now. I thought I know it well, yet I stumbled upon an interesting case that surprised me.The code that works Here's a piece of code that I started with. This code works like you would expect.
Sztuka programowania 3987 dni, 11 godzin, 43 minuty temu 115 źrodło rozwiń
Przed przeczytaniem tego postu zachęcam do zapoznania się następującymi wpisami: 1. Typ dynamic w C# 4.0 2. Zastosowanie dynamic: ExpandoObject 3. Zastosowanie dynamic: DynamicObject ExpandoObject to przydatna czasami klasa, ale problem z nią taki, że nie można jej rozszerzać i nawet została oznaczona jako sealed. Aby skorzystać z klasy Gemini, najpierw należy zainstalować odpowiedni pakiet z NuGet: Zacznijmy od przykładu pokazującego, że faktycznie można po Gemini dziedziczyć:internalclass Progr...
Sztuka programowania 4084 dni, 13 godzin, 17 minut temu 332 źrodło rozwiń
And how are you defining your variables?
Sztuka programowania 4119 dni, 13 godzin, 48 minut temu 207 źrodło rozwiń
Microsoft z każdą wersją wprowadza pewne nowe elementy do języka, które teoretycznie powinny poprawić możliwości języka, jak komfort pracy programisty. Od wersji .net 4.0 wprowadzono nowy typ – dynamic. Jego użycie pozwala na wykonanie czynności, które będą dopiero znane w momencie wykonania aplikacji. W dużym skrócie oznacza to, że kompilator pozwoli na wywołanie dowolnej akcji na obiekcie bez zgłoszenia błędu. Kod zostanie bez problemu skompilowany, nawet, jeśli nie istnieje metoda do której się odwołu...
W zeszłym tygodniu pisałem o zastosowaniu dynamicznych zmiennych. W dzisiejszym wpisie zastanowimy się co dokładnie CLR robi z dynamic i jak to wpływa na wydajność aplikacji. Pierwszy test polega na porównaniu wydajności dodawania dwóch liczb:privatestaticvoid TestStatic() { var stopwatch = Stopwatch.StartNew(); int a =10; int b =45; int c = a + b; stopwatch.Stop(); Console.WriteLine("Static:{0}", stopwatch.ElapsedTicks); } privatestaticvoid TestDynamic() { var stopwatch = Stopwatch...
Sztuka programowania 4327 dni, 18 godzin, 44 minuty temu 97 źrodło rozwiń
Kiedyś już wspomniałem o słowie kluczowych dynamic. W tym i następnych wpisach chciałbym przedstawić praktyczne zastosowanie tego mechanizmu. Na koniec wyjaśnię, jak dynamic jest zaimplementowany przez CLR i jak bardzo spowalnia aplikację… Programiści używający ASP.NET MVC z pewnością rozpoznają zasadę działania ExpandoObject. Klasa umożliwia tworzenie dynamicznych kontenerów. Na przykład:privatestaticvoid Main(string[] args) { dynamic bag =new ExpandoObject(); bag.FirstName ="Piotr"; bag.LastN...
Sztuka programowania 4342 dni, 4 godziny, 42 minuty temu 109 źrodło rozwiń
Niedługo dostępny będzie C# 4.0. Z ciekawych rzeczy, które mają wprowadzić:dynamic - ciekawy, aczkolwiek niepokojący feature. W skrócie - dostaniemy typy nieokreślone z możliwością wywoływania na nich dowolnych metod, które będą bindowane dopiero w czasie wykonywania (w przypadku klas .NET-owych; dla obiektów COM i obiektów z interfejsem IDynamicObject magia jest jeszcze głębsza)...