W C# 3.0 wprowadzono nowy typ inicjalizacji pól klas, przykład:class SampleClass { publicint X { get; set; } publicint Y { get; set; } } SampleClass sampleClass =null; try { sampleClass =new SampleClass {X =5, Y =10}; } catch (Exception) { } int y = sampleClass.Y; Przed c# 3.0 programiści zwykle używali następującej konstrukcji:SampleClass sampleClass =null; try { sampleClass=new SampleClass(); sampleClass.X =5; sampleClass.Y =10; } catch (Exception) { } int y = samp...
W ramach kontynuacji cyklu o Reactive Extensions dla .NET ([RX 1], [RX 2], [RX 3], [RX 4], [RX 5], [RX 6], [RX 7]) chciałbym przejść teraz do zdarzeń, dla których Rx dostarcza szczególnego wsparcia. Programowanie reaktywne, to również wykorzystanie zdarzeń (z j. ang. event), do których podłączamy się, przekazując delegat do funkcji, która ma obsłużyć zdarzenie (z j. ang. event handler), następnie czekamy na nachodzące zdarzenia. Dla przykładu rozważmy obsługę zdarzeń związanych z ruchem myszy. Wyobraźmy ...
Programowanie rozproszone 4753 dni, 23 godziny, 13 minut temu 213 źrodło rozwiń
Dzisiaj prosta i częsta sprawa – obsługa zdarzeń. Zdefiniujmy fikcyjne zdarzenie:class SampleClass { publicevent EventHandler EventHappened; } Następnie mamy jakąś metodę, która po wykonaniu własnej logiki, wywołuje zdarzenie. Jak powinno to zostać prawidłowo wykonane? Zacznijmy od niepoprawnego podejścia:class SampleClass { publicevent EventHandler EventHappened; privatevoid Method() { EventHappened(this,new EventArgs()); } } Metoda spowoduje wyjątek jeśli żadne z...
Dziś krótko. W ramach kontynuacji artykułu o Reactive Extensions dla .NET ([RX 1], [RX 2], [RX 3], [RX 4], [RX 5], [RX 6]) chciałbym wrócić znów do obserwowalnych kolekcji i źródeł, na podstawie których one powstają. Przecież nie zawsze powstaną one ze "zwykłej" kolekcji i zwykle nie jest wiadome, jakie dane one zawierają. Reactive Extension (RX) wyróżnia dwa typy źródeł danych, na podstawie których może powstać obserwowalna kolekcja. Są to źródła zimne i ciepłe (z j. ang. cold i hot). Źródła "zimne" s...
Programowanie rozproszone 4754 dni, 23 godziny, 21 minut temu 104 źrodło rozwiń
autor: Nowy rok za nami, pora na mały noworoczny prezent. W mojej bibliotece znajduje się kilka książek, które zostały wybrane przez moją drugą połówkę jako „coś co zagraca mieszkanie w którym nie ma miejsca na moje książki” :) Dlatego też przez najbliższe kilka tygodni będę starał się oddać wszystkie te książki, które zostały wybrane/wskazane itp. itd.. Zasady ich oddania są banalnie proste...
Czy kiedykolwiek zdarzyło się Wam spotkać z aplikacją, która podczas przetwarzania jakiś bardziej złożonych i czasochłonnych operacji, swoje okno w sposób, który skutecznie blokował Waszą pracę? Czy nie zdarzało się Wam również w takich sytuacjach ujrzeć pełny optymizmu napis Brak odpowiedzi? Podejrzewam że każdy z Was, przynajmniej raz spotkał się z taką sytuacją. Być może część z Was przeklinała system operacyjny, choć w istocie to nie była do końca jego zasługa. Bardziej winny w takiej sytuacji był...
Architektura 4755 dni, 8 godzin, 28 minut temu 137 źrodło rozwiń
Chciałbyś przetestować Rails? Nie chcesz instalować u siebie całego środowiska, a może utworzyłeś pierwszą aplikację ‘Hello world’ w Rails nie nie wiesz gdzie ją przetestować?
Używając LINQ należy pamiętać o takiej właściwości tego języka zapytań jak opóźnione wywoływanie (Diferred Execution). Polega to na tym, iż zapytanie jest wywoływanie dopiero wtedy, gdy jest to rzeczywiście potrzebne. Najczęściej dzieje się podczas wowoływania metody, która sprawdza całą kolekcje, którą przeszukujemy, takimi metodami są np. Count() ToList() Każda z tych metod, aby zwrócic wynik musi sprawdzić całą kolek...
Na początku stwórzmy strukturę z konstruktorem przyjmującym dwa parametry:publicstruct SampleStruct { public SampleStruct(int x, int y) { _x = x; _y = y; } privateint _x, _y; } Czy powyższy kod jest prawidłowy? Tak, skompiluje się i będzie działał bez problemów. Zdefiniujmy więc domyślny konstruktor:publicstruct SampleStruct { public SampleStruct() { _x = _y =0; } public SampleStruct(int x, int y) { _x = x; _y = y; ...
autor: W poprzednich częściach ([RX 1], [RX 2], [RX 3], [RX 4], [RX 5]) artykułu o Reactive Extensions dla .NET pojawiło się już dość sporo teorii, ale raczej mało przykładów, w tym wpisie chciałbym się skupić właśnie na przykładach bazujących na zdobytej uprzednio wiedzy. Zacznijmy od zastanowienia się nad prostymi subskrypcjami. W przykładzie z wpisu pt.: "[RX 3] Reactive Extensions pierwszy kontakt z kodem", zasubskrybowaliśmy obiekt typu IObservable (funkcją Subscribe) i jako parametr przekazane zost...
Programowanie rozproszone 4758 dni, 18 godzin, 33 minuty temu 98 źrodło rozwiń
W komentarzu do poprzedniego posta Bartosz napisał, że według niego nowo utworzony obiekt z wynullowanymi polami nie zawsze jest błędem i czasami może mieć sens. Nie zgadzam się z tym zupełnie. Powiem więcej: wg mnie, w językach wysokiego poziomu (chodzi mi o takie, gdzie już nie musimy ręcznie alokować i zwalniać pamięci) wartość null nie ma w ogóle racji bytu! ...
Architektura 4760 dni, 2 godziny, 44 minuty temu 404 źrodło rozwiń
Ostatnimi czasy (tuż przed świętami) stwierdziłem że .Net oferuje dosyć ubogie wsparcie dla struktur drzewiastych. Ponieważ miałem konieczność dokonywania operacji Wspieranych przez Linq naturalnym pomysłem było napisanie operacji wspierających iterowanie po drzewie (takiej małej małpki). W ramach tego artykułu opisuję co udało mi się osiągnąć. Nieprzyzwyczajonych do mojej formy wypowiedzi przepraszam za to że "Ten wykwit werbalnej weny wyrodził się w wielomówność" i zapraszam do lektury samego artykułu.
Architektura 4760 dni, 2 godziny, 44 minuty temu 211 źrodło rozwiń
Tak jak pisałem we wcześniejszych częściach ([RX 1], [RX 2], [RX 3], [RX 4]), Reactive Extensions dla .NET oferują mnóstwo pomocniczych rozszerzeń pozwalających na proste tworzenie obserwowalnych kolekcji. Przyjrzyjmy się tym najbardziej podstawowym. Najprymitywniejsze kolekcje obserwowalne Poniższa tabela przedstawia najprymitywniejsze (lub inaczej najprostsze) kolekcje obserwowalne. Dla każdego przykładu oprócz funkcji generującej obserwowalną kolekcję, podano również odpowiednik w postaci kolekcj...
Niedawno był wpis o naprawdę wspaniałym edytorze jakim jest Sublime Text 2. Wtedy postarałem się przedstawić sporo użyteczności i ciekawostek jakie do tego czasu udało mi się zlokalizować/poznać. Dziś ciąg dalszy nowości (tak na “gorąco” bym rzekł), które poznałem w ostatnim czasie, a które wydają się naprawdę fenomenalne. W szczególności dla programistów ;]
W zeszłym poście pisałem o strukturach w c#. Jednym z ważnych efektów ubocznych jest boxing oraz unboxing. Jak wiemy z poprzedniego wpisu struktury przechowywane są na stosie a klasy na stercie. Boxing to niż innego jak wrapping struktury (lub jakiekolwiek innego typu wartościowego) w obiekt przechowywany na stercie. Na przykład:int value=0; object boxedValue=value; // boxing Zmienna value przechowywana jest na stosie, z kolei boxedValue na stercie (pamiętajmy o nagłówku oraz GC). Należy zwrócić szcz...
O mapowaniu przestrzeni nazw CLR na przestrzenie XML w XAMLu.
Silverlight 4761 dni, 3 godziny, 55 minut temu 119 źrodło rozwiń
Przeglądając kod wielu projektów, zarówno komercyjnych jak i open source, można spotkać całą masę konwencji nazewniczych stosowanych do klas i metod testujących. Dzisiaj przedstawię kilka moich zasad w tej materii wraz z uzasadnieniem. Wychodzę z założenia, że bardziej niż konwencja, standard czy "przyjęta dobra praktyka" liczy się czytelność pisanego kodu i łatwość powrotu do niego nawet po kilku miesiącach od napisania. Dlatego też w swoich projektach nie mam zdefiniowanej jedynego słusznego schematu n...
Znajomość różnić między klasą a strukturą w c# jest bardzo ważna ze względu na kwestie wydajnościowe. Sposób wykorzystania może czasami wydawać się bardzo podobny, jednak to co dzieje się w tle jest kompletnie różne. W przypadku C++, struktury i klasy były bardzo podobne i reprezentowane były w pamięci w taki sam sposób. Różnica polegała na tym, że pola klas domyślnie były prywatne, a struktur publiczne. Przede wszystkim struktura jest wartością (value type) a klasa typem referencyjnym. Value Type jest ...
Nauka WPF idzie całkiem dobrze, a to oznacza kolejną porcję informacji. Dzisiaj trochę o ficzerze z Windows7 (które jest w Viście), a nie wiem czy będzie nadal aktualny w nowej wersji Windows, która pewnie ukaże niebawem. Opowiem trochę o pasku postępu, który można wyświetlać na ikonie aplikacji, która jest na systemowym pasku zadań, oraz o tym jak dodać kilka (maksymalnie 7 widocznych) guzików do podglądu aplikacji. Przez podgląd rozumiem, najechanie myszą na ikonę działającej aplikacji, znajdującą si...
Na dzień dzisiejszy wybierając "mocking framework" stawiam właśnie na fakeiteasy. Ma ona jeden ciemny zakamar, w którym można nieźle pobłądzić... a jest to testowanie wywołania settera.