Kolekcje generyczne są bezpieczną (ang. type-safe), szybką i wydajną (ang. performance) wersją ich nie-generycznych odpowiedników. Przykładowo List, Dictionary, Queue, Stack, SortedList i SortedDictionary są odpowiednikami zwykłych kolekcji. Różnica polega na tym, że korzystając z typów generycznych podajemy parameter, który jest zamieniany na nazwę typu podczas kompilacji. W ten sposób można użyć każdego typu, ale tylko wcześniej określonego. W innym wypadku otrzymamy błędy już przy kompilacji. Namiastk...
Strona głównaUżytkownik
Damian | użytkownik
Zdarzyło Ci się kiedyś mieć taki dzień, w którym wszystko, co komitowałeś do systemu kontroli wersji, było złe? Tak w ogóle, to czym dokładnie taki dzień różni się od każdego innego? Ale bądźmy poważni. Kod, który jest widoczny to kod, który może być niepoprawny. Nie powinno to być zaskoczeniem. Ale czy wiesz, że nawet kod, którego nie widać, również może być zły?
Bardzo krótka demonstracja tego, jak można zastosować atrybut ValuesAttribute z NUnit 2.5 do wygenerowania testów dla więcej niż jednej wartości naraz. Testować będziemy klasę, która oblicza 22%-ową stawkę podatku VAT.
Pracując nad jakąś aplikacją czasami musimy ją zdebugować. Sposobów na to jest wiele – np. podpinając się pod odpowiedni proces. U mnie standardowo wygląda to tak: menu Debug->Attach to Process…->w3wp.exe. Wykonuję tę operację dość często. Jak wiele czynności w pracy z komputerem można tę operację zautomatyzować, tworząc np. makro. W Visual Studio wybieramy: Tools->Macros->Macros IDE Dodajemy nowy moduł, nadajemy mu nazwę, np. RecordingModul...
Co roku Microsoft organizuje praktyki Internship dla najzdolniejszych studentów. Jest to dla nich możliwość uczestnictwa w realizacji prawdziwych projektów, spotkania z doświadczonymi specjalistami, zdobycia cennej wiedzy oraz doświadczenia. Dzisiejszy nasz bohater (Paweł Góra) był w ostatnie wakacja na tych praktykach. Zadaliśmy mu kilka pytań, na które z wielką chęcią opowiedziedział. Miłej lektury!!! Academic Flas...
Niedawno (5-go listopada 2009) pojawiła się kolejna wersja pakietu SDK dystrybuowanego przez OPC Foundation i wspierającego standard OPC Unified Architecture: OPC UA SDK 1.01.307.0 Stable. Pakiet SDK dostępny jest w kilku postaciach instalacyjnych, których opis można znaleźć w dokumencie: "ROADMAP TO UA SOFTWARE DOWNLOADS". Plik readme można znaleźć tutaj. Poszczególne instalatory pakietu dostępne są ze strony OPC Foundation w dziale download (dostęp tylko dla członków OPC Foundation). W skład pakietu w...
Tym wszystkim co chcą się dowiedzieć: jak obsługiwana jest pamięć na platformie .NET, jak działa Garbage Collector, co to są generacje zmiennych i z jakimi stosami mamy do czynienia w .NET, co to są obiekty tymczasowe, jak przechowywane są duże obiekty i dlaczego mamy do czynienia z fragmentacją pamięci, jak przebiega finalizacja (kiedy potrzebny jest destruktor, metoda Finalize lub wykorzystanie mechanizmu Dispose) jakie są częste problemy z pamięcią. Polecam obejrzenie filmu-prezentacji: http://www...
Patrząc na materiał który dzisiaj mamy do przerobienia artykuł nie powinien być długi a pomówimy sobie o kolekcjach i słownikach. Czyli o bardzo pomocnych typach danych :)Kolekcje Kolekcja jest klasą która pozwala na dodawanie elementów a później iterowanie po nich. .NET Framework udostępnia nam następujące klasy kolekcji: ArrayList – prosta klasa która umożliwia przechowywanie dowolnego typu danych oraz iterowanie po nich. Można ją oczywiście rozszerzyć do własnych celów etc. Queue – nic innego jak kole...
Aby bez problemu programiści wykorzystujący Visual Studio 2008 SP1 mogli łączyć się z Team Foundation Server 2010, opublikowany został dodatek - Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010.
Po wyjściu finalnej wersji ASP .NET MVC 1.0 zabrałem się ostro do nauki nowej platformy. Już wcześniej oglądałem kilka webcastów z strony www.asp.net oraz śledziłem uważnie blog Scott Guthrie dotyczących MVC i raczej nie spodziewałem się niczego nowego. Właściwie jedyną rzeczą która od razu rzuciła mi się jednak w oczy po wyjściu wersji finalnej był brak plików codebehind dla widoków. Na początku nie potrafiłem zrozumieć dlaczego coś, co używałem od...
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 jego poprawne działanie dba CLR w wersji 2.0.50727 może nieźle namieszać. Szczególnie u początkujących developerów.
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 znany mi sposób z poziomu interfejsu użytkownika. Jak więc wykorzystać ten trik we własnych programach?
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.
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.
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:
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?
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:
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 umiesz korzystać także z metod anonimowych. Jeżeli umiesz korzystać z metod anonimowych, to... to są właśnie wyrażenia lambda, tylko trochę ...
Podobnych zestawień można znaleźć w sieci całe mnóstwo. Jednakowoż dorzucę swoje 11 kopiejek w postaci 11 punktów, o których dowiadywałem się z czasem i częstokroć niespodziewanie. Dlaczego 11? Bo nie mogłem się zdecydować na wykreślenie któregokolwiek z nich z listy. Poza tym Rammstein na każdym albumie zamieszcza 11 piosenek, które to stwierdzenie poddaje w wątpliwość sens jakichkolwiek związków przyczynowo-skutkowych zamieszczonych na niniejszym blogu. Ale nieważne. Tak czy siak bez znajomości tej zło...
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...