Ileż to razy zmuszeni jesteśmy pisać kod temu podobny: 1: list.ValueMember = "Id"; 2: list.DisplayMember = "Name"; Na CodeGuru niejednokrotnie pytano o jakiś sposób na rozwiązanie tego problemu. Podawanie stringów jest ZŁE, niewygodne i bardzo podatne na błędy wszelakie. Zmiana nazwy właściwości rozwala UI, refactoring bez dodatkowych narzędzi jak Resharper potrafi napsuć sporo krwi (a i z pomocą R# wcale przyjemny nie jest)... Syf, kiła i mogiła. Postano... [More]

Kiedyś już wspominałem o fajnym wykorzystaniu wyrażeń lambda w poście Wyrażenia lambda i extension methods - aspektejszyn. Dzisiaj przytoczę kolejne przykłady takiego ich zastosowania, które potrafią znacząco ograniczyć ilość powtarzalnego kodu w kodzie (badaniem ilości cukru w cukrze zajął się kto inny). Całość wrzuciłem sobie do statycznej klasy MethodWrappers, przyjrzyjmy się jej zawartości... IgnoreExceptions() Celem tej metody jest maksymalne skrócenie takiego potwora: 1: try ... [More]

Podczas przygotowywania kolejnego posta z serii "Samples" zaimplementowało mi się coś bardzo fajnego, co chyba zasługuje na osobną notkę. Oto zatem kolejna krótka demonstracja potęgi połączonych mechanizmów C# (v. 2 i 3). Scenariusz: mamy formatkę wypełnioną panelami, groupboxami, layoutami i wszystkimi innymi kontenerami jakie tam jeszcze Bozia z Redmond na toolbox wrzuciła. Nachodzi nas chętka na wykonanie pewnej operacji na WSZYSTKICH kontrolkach zawartych w oknie, niezależnie od tego gdzie ... [More]

Partial classes & partial methods - explained

28 sierpnia 2008 19:15 w kategorii: pro
Tagi: , , ,
...far far away... Bohaterami dzisiejszego spotkania są dwa współpracujące ze sobą twory (Bolki?), różniące się znacząco wiekiem. Partial classes (klasy częściowe...) zostały wprowadzone do .NET za czasów wersji 2.0 zarówno platformy .NET jak i języka C#. Partial methods z kolei to "najnowsza nowość", bowiem przyjście na świat tej konstrukcji miało miejsce zaledwie kilka miesięcy temu, wraz z .NET 3.5, C# 3.0, LINQ, lamda, extensions itpm (i tym podobną magią). O ile jednak całe jej "rodzeństwo... [More]

Oto trzy przykładowe scenariusze, które wykorzystują moc daną nam przez Andersa Hejlsberga i spółkę:1. Sprawdzenie, czy wszystkie textboxy są wypełnionePrzykładzik banalny i w wielu sytuacjach niepraktyczny, ale ładnie prezentujący wygodę pisania kodu "the 3.0 way".Stary kod: 1: private bool AreAllTextboxesFilledOldWay() 2: { 3: foreach (Control c in this.Controls) 4: { 5: TextBox tb = c as TextBox; 6: if (tb == null) 7: continue; 8: 9: if (tb.Text == string.Empty) ... [More]

let - revisited

13 lipca 2008 20:02 w kategorii: pro
Tagi: , , ,
W poprzednim poście zapoznaliśmy się ze słówkiem "let". Dzisiaj do niego powrócimy i zobaczymy dlaczego należy korzystać z tej konstrukcji z uwagą. Jak wiadomo diabeł tkwi nie tylko w kobietach, ale i w szczegółach. A więc do rzeczy...Przykład z ostatniego posta jest nadal aktualny - poszukujemy osób z wiekiem mniejszym niż średnia wieku całej kolekcji. Poniżej dwa sposoby:1) Sposób pierwszy, znany od dawien dawna, w dzisiejszych czasach można by rzec "lamerski": 1: double average = persons.Av... [More]

let - explained

7 lipca 2008 19:23 w kategorii: pro
Tagi: , , ,
Wraz z LINQ do C# zawitało słówko kluczowe let. Najpierw krótkie naszego dzisiejszego gościa przedstawienie. Wyobraźmy sobie klasę Person z imieniem, nazwiskiem oraz wiekiem. Idąc dalej wyobraźmy sobie zadanie: wybrać te osoby, których wiek jest mniejszy niż średnia wieku wszystkich osób w zbiorze. Konstrukcja let daje nam możliwość zapamiętania danej wartości w samym sercu zapytania LINQ, co pozwala nam zwiększyć jego czytelność i uniknąć deklarowania zmiennych poza jego wnętrzem. Przykład: 1: ... [More]

Lambda expressions - explained

26 marca 2008 14:05 w kategorii: pro
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, tylk... [More]

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 = instance.Cursor; 6: instance... [More]

Extension methods - explained

29 lutego 2008 12:42 w kategorii: pro
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 (*).Rodzi się jednak pytanie: w jaki sposób osiągnięto ów cel, skoro wiadomo, że CLR poz... [More]