Wbudowany mechanizm optymalizacji może czasami przynieść zaskakujące wyniki. Rozważmy poniższy fragment kodu:string var1 ="text"; string var2 ="text"; bool condition =object.ReferenceEquals(var1, var2); Wydawałoby się, że var1 i var2 stanowią dwie osobne referencje. Po uruchomieniu kodu przekonamy się jednak, że zmienna condition będzie miała wartość true. Spowodowane jest to wykonaną optymalizacją, polegającą na tym, że .NET przechowuje zbiór użytych w programie napisów. Deklarując zmienną przec...
Na blogu oraz MSDN pisałem niejednokrotnie o testach jednostkowych oraz integracyjnych. Ostatnio jednak zastanawiałem się nad podstawowym problemem – jak zorganizować to od strony struktury katalogowej? Musimy rozważyć następujące problemy:Testy powinny być w każdej chwili dostępnie do odpalenia i weryfikacji.Wykonując prostą refaktoryzację (zmiana nazwy klasy), automatycznie nazwa powinna zaktualizować się w testach.Testy jednostkowe stanowią dobrą dokumentację oraz instrukcję używania zaimplementowanej...
Dzisiaj będę się chwalił się swoją niewiedzą. Kilka dni temu kolega zadał mi pytanie, którym skutecznie mnie zagiął. Ponieważ uważam, że głupotą nie jest brak wiedzy co raczej udawanie, że się ją posiada, czym prędzej się Wam tym pytaniem chwalę. Co zostanie wyświetlone po takim kodzie i dlaczego? string string1 = "Test"; string string2 = string1; string string3 = "Test"; Console.WriteLine(Equals(string1, string2)); // 1. Console.WriteLine(Equals(string1, string3)); // 2. Console.WriteLine(ReferenceE...
W przyszłych postach chcę zająć się Reactive Extensions, jednak zanim zacznę cykl postów o tym, najpierw przedstawię dwa interfejsy wprowadzone w .NET 4.0. Interfejsy umożliwiają implementację wzorca obserwator. IObserver powinien zostać zaimplementowany dla klasy, która chcę być powiadamiana o zmianach dokonywanych na klasie implementującej IObservable. Przyjrzyjmy się najpierw metodom IObserver:OnCompleted – obserwacja wszelkich zmian zakończona.OnError – wystąpił błąd.OnNext – Nowa zmiana np. dodano e...
Z klasami częściowymi większość programistów c# prawdopodobnie miała już styczność. Klasycznym przykładem jest rozbicie klasy Form na część wygenerowaną przez Visual Studio oraz na część przeznaczoną do modyfikacji przez programistę. Metody częściowe są bardzo podobnym mechanizmem. W skrócie są to metody, które można definiować w dwóch różnych plikach. Zdecydowałem się o nich napisać ponieważ wydaje mi się, że są mniej znane, a czasami mogą okazać się przydatne. Sama deklaracja jest analogiczna do klas ...
No właśnie, tak naprawdę dlaczego? Dla sławy, pieniędzy, lasek, szybkich samochodów? Sweterków w romby, okularów, flanelowych koszul? Czy może jeszcze z jakichś innych powodów?
Z serii: artykuły dla zielonych, może komuś pomoże zrozumieć czym są interfejsy w technologii .NET
W języku c# obiekt, którego zasobami chcemy sami zarządzać, powinien implementować interfejs IDisposable. Sporo osób aby zwolnić zasoby pisze następujący kod:publicclass MyClass : IDisposable { #region IDisposable Memberspublicvoid Dispose() { // zwalnianie zasobow } #endregion } Interfejs niestety wymusza nam tylko implementację metody Dispose. Powyższe rozwiązanie jest zdecydowanie nieprawidłowe. Zanim jednak przejdę do omawia co w kodzie jest niepoprawnego, podam prawidłową ...
Od początków istnienia Internetu, jedną z jego głównych funkcji było zadawanie pytań odpowiednio sprofilowanemu gronu słuchaczy – np. grupom dyskusyjnym Usenetu – i otrzymywanie na nie odpowiedzi. Narzędzia i sposoby komunikacji się zmieniają (mamy teraz fora, strony typu StackExchange, a nawet serwisy społecznościowe), ale ich przydatność w rozwiązywaniu programistycznych problemów pozostaje co najmniej niezmienna.
Słów kilka na temat tego, co złego może kryć za sobą ta pozornie niewinna praktyka.
Czasami typ ENUM znajduje zastosowanie(czasami ponieważ często ogranicza on modułowość aplikacji). W wielu przypadkach potrzebujemy jednak skojarzyć pewien opis z każdą wartością enum’a. Jako praktyczny scenariusz można wymienić implementację menedżera dźwięków. Dla przykładu w pewnej grze, którą współtworzyłem aby uatrakcyjnić interfejs dla programisty zdefiniowałem sobie typ enumeryczny SOUNDTYPE:publicenum SOUNDTYPE { ROCKETLAUNCH, MACHINEGUN_LAUNCH } Programista zatem chcąc wykorzystać d...
Programując własne biblioteki, często potrzebujemy zdefiniować własny typ wyjątku. Przeglądając różnego rodzaju kody źródłowe nierzadko spotykam błędną deklarację własnych wyjątków:publicclass MyException : Exception { // specyfikacja } Co prawa kompilator nie zgłosi błędu ale już np. CodeAnalysis zwróci nam uwagę o błędnej deklaracji. Najprościej korzystać w Visual Studio z tzw. snippet’ów czyli gotowych fragmentów kodu. Naciskając klawisze ctrl+space pojawi nam się lista dostępnych snippetów w VS...
O wielowątkowości pisałem już niejednokrotnie. Niestety w żadnym z moich postów, nie wyjaśniłem podstawowych pojęć związanych z współbieżnością. Oczywiście jeśli wykorzystujemy wątki do prostych zadań typu asynchroniczne połączenie z usługą, poważniejszych problemów nie doświadczymy. W przypadku jednak nieco bardziej zaawansowanych algorytmów, musimy zawsze badać nasz kod pod kątem: 1. Zakleszczenie (deadlock) – występuję gdy wątek A czeka aż wątek B skończy swoją operację a wątek B czeka aż wątek A zako...
Generator haseł z możliwością parametryzacjilis 21 2011 9:48 W końcu nadszedł ten dzień, kiedy metoda Membership.GeneratePassword przestała mi wystarczać. Zawiedziony niewystarczającymi możliwościami tego generatora napisałem poniższy kawałek kodu:using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using Olsoft.Common.Extensions; namespace Olsoft.Common.Security { public interface IPasswordGenerator { string Generate(int length)...
No niestety tezę tę opieram na swoim przykładzie. Skąd więc taka generalizacja, że posądzam o lenistwo wszystkich? Bazuję na swoich odczuciach i na przeświadczeniu, że gdy sam sobie organizuje pracę, to lenistwo mnie nie nęka!
Dzisiaj króciutki post. Wchodząc we właściwości projektu jako Target Platform można zauważyć .NET Framework 4 Client profile oraz .NET Framework 4. Jaka jest różnica? Client profile to taka mocno uproszczona wersja .NET framework przeznaczona dla aplikacji klienckich. Dzięki temu użytkownik nie musi instalować pełnego .NET Framework a uproszczony i mniej ważący Microsoft .NET Framework 4 Client Profile. Wersja kliencka zawiera między innymi wsparcie dla WPF, WCF, WWF, Entity Framework, Linq To SQL, MEF. ...
Od jakiegoś czasu chciałem napisać coś o refleksji, gdyż od kiedy niedawno zacząłem jej używać spodobała mi się bardzo Dziś krótko bo szybko.
Kilka dni temu, w zgodzie z tym co wykazała ankieta - Programiści to stworzenia nocne - kodowałem sobie jakieś mało znaczące rzeczy pomiędzy 2 a 3 nad ranem. Jako, że niewiele się o tej porze dzieje, można spokojnie skupić się na programowaniu :). Jakież było moje zdziwienie, gdy o godzinie 2:28 nagle zaczęły spływać raporty błędów z dotnetomaniaka. Sam fakt pojawienia się błędów nie jest jeszcze jakiś niezwykły - wiadomo, od czasu do czasu może pójść coś nie tak. Bardziej interesujący był komunikat kt...
z pamiętnika anonimowego programisty
z pamiętnika anonimowego programisty