Extension Methods można wykorzystać nie tylko do dodawania metod do istniejących klas, ale także jako najprostszy mechanizm mapujący. Nie musimy tworzyć całej biblioteki do mapowania, wystarczy dodać do klasy odpowiednią metodę np. Map.
W LINQ mamy dwie metody First() oraz Single(). Obie metody zwracają po jednym rekordzie. Jaka jest więc między nimi różnica? Zobaczmy na kawałek kodu i jego reprezentację w bazie MS SQL.
Zaczynamy od próbki kodu:staticclass StringExtensions { publicstaticvoid SayHello(thisstring str, string message) { Console.WriteLine(string.Format("Hello:{0}", message)); } } internalclass Program { privatestaticvoid Main(string[] args) { string str =null; str.SayHello("Piotr"); } } Co według Was wydarzy się po uruchomieniu programu? Na pierwszy rzut oka może wydawać się, że wystąpi NullReferenceException ponieważ wywołujemy metodę na nieistniejącym obi...
Coursera to darmowe kursy online głównie z IT. Prowadzone są przez pracowników dobrych światowych uniwersytetów. Warto spróbować nawet dla samych doznań online na najwyższym poziomie.
W C# typy proste przekazywane są przez wartość. Oznacza to, że za każdym razem wszystkie bity są kopiowane. Ponadto jakiekolwiek operacje dokonywane na takim polu, nie są widoczne na zewnątrz, na przykład:internalclass Program { privatestaticvoid Increment( int value) { value++; } privatestaticvoid Main(string[] args) { int value =5; Increment(value); Console.WriteLine(value); } } Czasami zachodzi potrzeba przekazania wyniku z powrotem albo ze wz...
by Shane Pope W 2010 roku poczyniłem post prezentujący być może jedną z mniej znanych funkcji Visual Studio 2010. Jako, że od tamtego czasu minęło sporo czasu a za nami release najnowszej wersji VS postanowiłem odświeżyć tamten wpis co nieco. Klawiatura w życiu programisty jest ważna. To tu nasze ręce spoczywają przez większość dnia, to tu gromadzimy zapasy jedzenie na zimę i to tędy przelewamy naszą wiedzę na papie...eeekran. Myszka jest drugorzędna. Przydaj się tylko, aby zrobić jakąś dodatkową czynno...
Temat poświęcony jest zagadnieniu definiowania własnych funkcji w modelu koncepcyjnym Entity Framework oraz ich wykorzystania w zapytaniach LINQ to Entities.
Przy korzystaniu z nHibernete'a czasem zachodzi potrzeba, aby prócz tabel, które są mapowane z obiektów mieć jakieś dodatkowe. Ja ostatnio miałem taką potrzebę w związku z Quartz.NET, który ma możliwość przechowywania swoich triggerów i akcji w bazie w przypadku, gdy powinny przeżyć restart puli aplikacji.
Dzięki temu mechanizmowi można tak jakby dodać metodę do klasy bez modyfikacji tej klasy (np. do już skompilowanej dll’ki). Implementacja krok po kroku...
Niedawno kolega opowiedział mi o jeszcze jednym przypadku kiedy opisane przeze mnie zachowanie konstruktora statycznego w środowiskach x86/x64 doprowadziło do kłopotów. Scenariusz był dość ciekawy, dlatego go opiszę na uproszczonym przykładzie. Zacznijmy od tego, że napisaliśmy zarządzany komponent COM. Komponent ten w konstruktorze statycznym czyta wartość jakiegoś parametru konfiguracyjnego z pliku i na tej podstawie coś robi. W poniższym przykładzie, żeby nie komplikować sprawy, po p...
W C# istnieje kilka metod sprawdzania czy obiekty są takie same. Czasami budzi to zamieszanie i dlatego w dzisiejszym wpisie chciałbym rozjaśnić wszelkie różnice i wyjaśnić jak prawidłowo powinno to być zaimplementowane. Mamy dwa sposoby porównywania obiektów. Pierwszy to sprawdzenie czy wskazują na taki sam obszar pamięci. Druga metoda polega na porównaniu wszystkich pól i sprawdzeniu czy są takie same. Jeśli pola mają taką samą wartość to przyjmujemy, że obiekty są sobie równe (value identity). W .NE...
W dzisiejszym wpisie pokażę w jaki sposób za pośrednictwem Entity Framework możemy wywoływać procedury składowane zwracające wyniki w postaci wartości skalarnej lub poprzez parametr wyjściowy.
W ostatnim poście przedstawiłem sposób na implementację unii w C#. Dziś kilka przykładów. Proszę jednak zwrócić uwagę, że unie zostały wprowadzone w czystym C, który nie miał nic wspólnego z programowaniem obiektowym. Dzisiaj możemy wiele konstrukcji lepiej napisać, wykorzystując klasy. Unie również ważną rolę odgrywały w optymalizacji. W c# sprawa wygląda inaczej, ponieważ jeśli zgodziliśmy się na zarządzaną pamięć przez GC, raczej nie zależy nam na oszczędzaniu kilku bajtów. Niemniej jednak klasyczny...
Dziś trochę o .NET Framework i strukturze BigInteger. Myślę, że komuś może to oszczędzić czasu na pisaniu własnych implementacji. Każdy z nas korzystał z typów takich jak short, int czy long. W większości przypadków w zupełności one wystarczającą i pokrywają większość scenariuszy. Czasami jednak aplikacja musi operować na dużo większych liczbach niż 32 czy 64 bitowe zmienne. BigInteger potrafi przechować dowolnie wielką liczbę całkowitą (ujemną lub dodatnią). BigInteger znajduje się w bibliotece System...
W poprzednim poście omówiłem atrybut StructLayout. Dzisiaj z kolei więcej przykładów. Głównie StructLayout wprowadzono aby móc wykonywać kod niezarządzany w .NET. Czasami wciąż zachodzi potrzeba wykorzystania niektórych funkcji z WinAPI. Cześć funkcji przyjmuje jako parametr struktury danych, które oczywiście musimy zmapować na strukturę c#. Na przykład, załóżmy, że mamy następującą strukturę:typedef struct DISPLAYDEVICE { DWORD cb; TCHAR DeviceName[32]; TCHAR DeviceString[128]; DWORD StateFlag...
Of course, the problem as it is not difficult to resolve. We can use the reflection to do that and that’s all. But what will happen if we have such a class: Then, you cannot simply use reflection without the knowledge about input parameters. Of course, if it cannot work with some default values like null or string.Empty then you could put some dummy information to every argument, and after that assign during the deserialization process you will assign the proper data to fields.
If you have read about the new features in 4.0 then probably you stumbled on a SpinWait structure and a MSDN article and the example code it provides. I'm going to show you what I think it's wrong with it.
Zanim przejdę do wyjaśniania po co został wprowadzony atrybut StructLayout, najpierw wyjaśnię jak pola w strukturach danych są rozmieszczane w pamięci. Weźmy na przykład taką strukturę:struct SampleStruct { publicbyte OneByte; publicint FourBytes; publicbyte OneByte1; } Ile pamięci powinno zostać zaalokowanej dla powyższej struktury? Może wydawać się, że 6 ponieważ Integer zajmuje 4 a Byte 1. Ze względu na optymalizacje nie jest to takie proste i oczywiste. Na moim komputerze jest to 12. Proc...
Pisane przez nas "biblioteki wielokrotnego użytku" mogą (a nawet: powinny być?) konfigurowalne. Konfiguracja musi być oczywiście rozprowadzana wraz z aplikacją korzystającą z takich bibliotek, więc obowiązkiem programisty aplikacji jest dołączenie do *config odpowiednich wpisów.
Jak wiemy, każdy obiekt, zarówno reference jak i value, pochodzi pośrednio\bezpośrednio od klasy object. Nie chce omawiać szczegółów ale jedną z protected metod dostarczonych przez object jest właśnie MemberwiseClone. Do czego ona służy? W skrócie: do wykonania tzw. płytkiej kopii (shallow copy). MemberwiseClone kopiuje obiekt pole po polu. Niestety jest to płytka kopia więc jak jakiś obiekt zawiera referencje do innych obiektów wtedy jedynie adres zostanie sklonowany a nie całe drzewo obiektów. Z typam...