Lista artykułów

Lambda expressions – explained

Lambda expressions – brzmi groźnie. To właśnie tym elementem języka C# 3.0 straszono programistów (a raczej programiści straszyli się nawzajem) jeszcze dobre kilkanaście miesięcy przed premierą .NET 3.5. A bo to “funkcyjne”, a bo to “nowe”, “nieznane” i trudne do pojęcia. Jak za chwilę zobaczymy – nic bardziej mylnego. Jeżeli kiedykolwiek korzystałeś z delegatów, to [...]

Metody get_ i set_

Właściwości (properties) to przyjemny mechanizm do zapewniania enkapsulacji, czyli jednej z najważniejszych cech programowania obiektowego. Przyjemniejszy niż zwykłe metody zwane “getters & setters”. Zwrócę jednak uwagę na ciekawy fakt (zapewne znany większości czytelników, ale…). Popatrzmy na następujący kod: 1: private int _number; 2: public int Number 3: { 4: get { return _number; } 5: [...]

Oceny postów

Właśnie włączyłem mozliwość oceniania postów na blogu – to pozwoli mi podążać w odpowiednim kierunku i wybierać najbardziej pożądane tematy. Let the rating begin!

Zagadka abstrakcyjnie zapieczętowana

Czy wiemy co to “abstract class”? WIEMY! A wiemy co to “sealed class”? WIEMY! Teoretycznie – dwa przeciwieństwa. Jedno zabrania tworzenia instancji klasy, drugie – zabrania dziedziczenia z klasy.Czy spotkał się ktoś kiedyś z klasą zadeklarowaną w ten sposób? 1: abstract sealed class AbstractSealed 2: { 3: }Kompilator naturalnie zgłosi sprzeciw. Jak więc możliwe jest uzyskanie [...]

Wyrażenia lambda i extension methods – aspektejszyn

Oto praktyczny przykład użycia wyrażeń lambda i metod rozszerzających, który lekko i prymitywnie “ociera się” o programowanie aspektowe i imituje jego podstawowe założenia:Najpierw tworzymy klasę zawierającą roszerzenia dla windowsowych formatek (ewentualnie naszej klasy bazowej): 1: public static class FormExtensions 2: { 3: public static void SetWaitingCursorFor(this Form instance, Action operation) 4: { 5: Cursor currentCursor [...]

Gra w chowanego z Intellisense

W dobie tak potężnych narzędzi jak Visual Studio programiści często zdają się całkowicie na ich funkcjonalność. Jedną z (wspaniałych zresztą) cech współczesnych IDE jest Intellisense. Czy wyobraża ktoś sobie pisanie kodu bez podpowiedzi? Zobaczmy jednak, że nie zawsze można na tym elemencie polegać w 100% ze względu na “konfigurowalność” nawet tego mechanizmu VS.Dla przykładu załóżmy dwie [...]

Łamiemy prywatność, czyli załóżmy Jarkowi konto!

Czasami zdarza się, że jesteśmy świadomi istnienia jakiejś funkcjonalności, jednak wredny twórca biblioteki bezwstydnie ją przed nami ukrył. A my ją odkryliśmy na przykład przy pomocy Reflectora.Zasymulujmy taką sytuację. Wyobraźmy sobie bibliotekę z klasą Jarek oznaczoną jako internal. Klasa Jarek z kolei chowa przed nami bardzo ciekawą funkcjonalność – zakładanie konta w banku za pośrednictwem [...]

Relacja z Heroes Happen Here

6 marca w Warszawie miała miejsce konferencja z cyklu Heroes Happen Here. Okazja: premiera trzech produktów Microsoft (Visual Studio 2008, Windows Server 2008 oraz Sql Server 2008). Całość składała się z dziesięciu dużych sesji podzielonych na dwie grupy: dev i itpro. Wysłuchałem wszystkich pięciu wykładów dla programistów i oto moje wrażenia (nie tylko zresztą moje [...]

“Zwijanie” plików w Visual Studio

Zdarza się, że mamy w projekcie grupę plików powiązanych ze sobą logicznie. Na przykład – jeden wygenerowany automatycznie i drugi uzupełniający go własnoręcznie napisanym kodem. Przykładem “z życia” są tu klasy form z .NET, gdzie to Visual Studio standardowo pokazuje swoją ciekawą funkcjonalność “zwijania” grupy powiązanych plików. Niestety, takie zachowanie nie jest dostępne w żaden [...]

Numerologia w .NET

Wraz z pojawianiem się kolejnych wersji .NET do świata programistów wchodziło coraz większe zamieszanie. Co oznacza każdy następny numerek, jakie zmiany wnosi, jak się owe zmiany mają do poprzedników? Przykładowy fakt, że piszemy program używając Visual Studio 2008 w języku C# 3.0 i korzystając jednoczeście z bibliotek w wersjach 2.0, 3.0 i 3.5, a o [...]

Extension methods – explained

W .NET 3.5 (a konkretniej – C# 3.0 oraz VB 9.0) pojawił się mechanizm “extension methods”. Cel przyświecający jego autorom był zaiste godny uwagi: umożliwienie dodania nowych funkcjonalności do już istniejących, skompilowanych klas. Jedna z kilku “Ruby-like features” wprowadzonych do świata .NET. Przydatność takiego rozwiązania trudno przecenić – w ten sposób rozszerzono m.in. klasy już istniejące w .NET 2.0 [...]

BlogEngine i NicEdit

BlogEngine.NET instaluje się standardowo z edytorem TinyMCE. Z kilku różnych względów nie do końca mi to odpowiadało – postanowiłem więc wstawić w jego miejsce NicEdit. Projekt jest jeszcze w fazie BETA, ale moim skromnym zdaniem zmierza prostą ścieżką prowadzącą niechybnie do sięgnięcia po tytuł “The Best WYSIWYG Editor Ever” (o ile taki powstanie). Krótka instrukcja [...]

Visual Studio Express & NUnit

Jeżeli chcemy wykonywać testy jednostkowe naszego kodu, ale posiadamy do dyspozycji jedynie wersję Express VS, ciągłe uruchamianie i konfigurowanie NUnit może być nieco uciążliwe. Oto krótka instrukcja ułatwienia sobie życia: 1) Z menu wybieramy Tools -> External Tools i definiujemy własne narzędzie (uwaga na wszystkie pola): 2) Po dodaniu NUnit do "External Tools" możemy przeciągnąć [...]

Model-View-Controller i testy jednostkowe

Jak powszechnie wiadomo – wielką zaletą wzorca MVC jest umożliwienie testowania jednostkowego logiki “wyciągniętej” z klas odpowiedzialnych za interakcję z użytkownikiem. Swego czasu śledziłem w internecie dyskusje na temat “Jak testować kontrolery, aby możliwie najbardziej odizolować je od reszty aplikacji”. O to przecież chodzi w Unit Testing…  Do rzeczy.   Przedstawienie problemu Kontroler pełni rolę pośrednika pomiędzy [...]

Początek

Witam na moim blogu. W niniejsze miejsce mam zamiar pompować swoje spostrzeżenia i relacje ze zmagań z technologiami MS, z którymi stykam się w życiu codziennym jako programista .NET. Dla siebie – jako notatki na przyszłość. I dla innych – jako porady uzupełniające moją działalność na portalu CodeGuru. Od tego – kategoria PRO. Zapewne okazjonalnie wrzucę coś “z zupełnie [...]