W C# można implementować interfejsy na dwa sposoby: jawny oraz niejawny. Rozważmy poniższy interfejs:interface ISerializable { void Serialize(string path); } Implementacja jawna:class ExplicitImplementation:ISerializable { #region ISerializable Membersvoid ISerializable.Serialize(string path) { thrownew NotImplementedException(); } #endregion } Implementacja niejawna:class ImplicitImplementation:ISerializable { #region ISerializable Membersvoid ISerializable.Serial...
Strona głównaUżytkownik
Paweł Łukasik | użytkownik
Sztuka programowania 4428 dni, 4 godziny, 36 minut temu 135 źrodło rozwiń
Visual Studio to potężne narzędzie i tak na dobrą sprawę ciężko wykorzystać wiele z możliwości dostarczonych przez projektantów Microsoftu. Spora grupka programistów ogranicza się do podstawowego zakresu funkcji - Solution Explorerem>, IntelliSense i ewentualne prostego debugowania. Tymczasem liczba opcji dostępnych w tym IDE jest porażająca. Sam często odkrywam nowe funkcje przez przypadek, lub wynajduję ich opis w Internecie. Po jakimś czasie zastanawiam się tylko, jak mogłem wcześniej programować bez ...
Rozpoznaję taki jakby pattern przeładowanych metod dla string.Format(…). Jest wykorzystywany w wielu miejscach we Frameworku jak i poza nim. Chciałem zwrócić uwagę na ILog.DebugFormat() w bibliotece log4net oraz na Console.WriteLine().
Sztuka programowania 4428 dni, 4 godziny, 36 minut temu 111 źrodło rozwiń
Istnieją 4 słowa kluczowe, o których istnieniu wie niewielu programistów C#: _arglist, _refvalue, _makeref, _reftype. Stanowią one jednak ciekawostkę, o której istnieniu warto mieć pojęcie. Oficjalna dokumentacja(C# Keywords) nie wspomina o nich. Można jednak szybko przekonać się o ich istnieniu, gdyż Visual Studio podświetla je podobnie jak inne słowa kluczowe.
Notacja węgierska to ZŁOOOOOO! Słychać to ze wszystkich stron i trudno się z tym nie zgodzić. Przedrostki nazw identyfikatorów określające typy takiego identyfikatora nigdy nie były jakimś nowatorskim rozwiązaniem – prędzej protezą. Czy oznacza to jednak, że całość tego pomysłu należy odbierać negatywnie? W mojej opinii nie. A dlaczego - o tym tenże wpis.
Sztuka programowania 4440 dni, 11 godzin, 36 minut temu 148 źrodło rozwiń
Wracając jeszcze do filozofowania o kodzie, dziś trochę o cechach klas, a dokładniej: pola i właściwości. Zanim wymyślono idee właściwości dostęp do pól odbywał się na dwa sposoby. Pole w klasie (np. name) mogło być publiczne i każdy miotał nim jak szatan, druga opcja to dostęp kontrolowany przez parę metod typu GetName i SetName. Umożliwiały one kontrolowanie tego kto i na jakich zasadach może korzystać z cech wewnętrznych klasy. Później, aby pominąć pisanie GetName/SetName, wymyślono właściwości, któr...
Sztuka programowania 4440 dni, 11 godzin, 36 minut temu 144 źrodło rozwiń
Proces instalacji to czynność długotrwała. Dodatkowo wymaga on co jakiś czas uwagi, choćby po to, aby potwierdzić warunki licencji, lub wcisnąć przycisk Dalej, albo podjąć jakąś decyzję. Niniejszy artykuł opisuje co należy zrobić, aby przygotować instalację automatyczną, w pełni powtarzalną.
Bazy danych i XML 4449 dni, 12 godzin, 47 minut temu 58 źrodło rozwiń
Wystąpienie BadImageFormatException, wśród doświadczonych developerów, rodzi pytanie czy przez przypadek nie została załadowana zewnętrzna biblioteka w złej wersji- 32 lub 64 bitowej. Nie jest to jednak jedyna przyczyna występowania tego wyjątku.
Każdy kod można usprawnić / napisać lepiej. Bez wyjątku. Nie ma kodu idealnego (jak już zresztą kiedyś pisałem). Jednak w pewnym momencie trzeba przestać, tzn. nie można dopieszczać w nieskończoność jednego kawałka kodu zaniedbując wszystko dookoła. Ale nie oznacza to, że powinniśmy akceptować każde poplątane ścierwo jakie wyjdzie spod naszych skrzypiących paluchów i mówić "spoko, jest wystarczająco dobrze".
Sztuka programowania 4464 dni, 6 godzin, 44 minuty temu 255 źrodło rozwiń
W dzisiejszym temacie zajmę się omówieniem poleceń ROLLUP, CUBE oraz GROUPING SETS. Polecenia te umieszczane są w klauzuli GROUP BY i pozwalają na wygenerowanie odpowiednich grupowań w celu agregacji danych.
Bazy danych i XML 4454 dni, 13 godzin, 21 minut temu 324 źrodło rozwiń
I’ve just published a little project of mine on GitHub, called VsDebugFx. It’s a NuGet package which you can install into your .NET project and get more expressiveness during your debugging sessions inside Visual Studio. It’ll let you evaluate expressions that use C# features which are not normally allowed by the IDE, namely: lambda expressions, anonymous types, LINQ queries and implicitly-typed arrays. I don’t want to repeat myself (DRY anyone?), so if you’re interested in knowing more, go check out th...
W ostatnim czasie zapoznawałem się trochę bliżej z narzędziem o nazwie NDepend. Przez ten czas na pewno nie stałem się ekspertem w korzystaniu z NDepend, chciałbym jednak podzielić się moimi subiektywnymi odczuciami na jego temat. Nie będę tutaj wymieniał jego funkcji (można to znaleźć na stronie producenta lub w wielu innych wpisach), nie będę pisał jak zainstalować (bo to proste, choć mi się nie podobało - lubię instalować a nie rozpakowywać :) ), nie będę się zastanawiać czy warto tego narzędzia używ...
Dzięki temu mechanizmowi można tak jakby dodać metodę do klasy bez modyfikacji tej klasy (np. do już skompilowanej dll’ki). Implementacja krok po kroku...
Niedawno kolega opowiedział mi o jeszcze jednym przypadku kiedy opisane przeze mnie zachowanie konstruktora statycznego w środowiskach x86/x64 doprowadziło do kłopotów. Scenariusz był dość ciekawy, dlatego go opiszę na uproszczonym przykładzie. Zacznijmy od tego, że napisaliśmy zarządzany komponent COM. Komponent ten w konstruktorze statycznym czyta wartość jakiegoś parametru konfiguracyjnego z pliku i na tej podstawie coś robi. W poniższym przykładzie, żeby nie komplikować sprawy, po p...
C# ma tę genialną zaletę, że pozwala komentować swoją treść specjalnymi znacznikami XML. Natychmiastowym efektem takich komentarzy jest ich prezentacja w postaci pomocy kontekstowej dla elementów kodu, które zostały nimi opatrzone. Drugie ich zastosowanie, to możliwość wygenerowania dla każdego pliku z treścią oprogramowania dokumentacji zawierającej elementy opatrzone wspomnianym typem komentarza. Niestety – określanie tych plików mianem dokumentacji jest nadużyciem...
Of course, the problem as it is not difficult to resolve. We can use the reflection to do that and that’s all. But what will happen if we have such a class: Then, you cannot simply use reflection without the knowledge about input parameters. Of course, if it cannot work with some default values like null or string.Empty then you could put some dummy information to every argument, and after that assign during the deserialization process you will assign the proper data to fields.
Us, developers, are a bit like that comic strip (from always great xkcd): We can endlessly debate over tabs versus spaces (don't even get me started), whether to use optional semicolon or not, and other seemingly irrelevant topics. We can have heated, informed debates with a lot of merit, or (much more often) not very constructive exchanges of opinions. I mention that to explicitly point out, while this post might be per...
Sztuka programowania 4482 dni, 9 minut temu 88 źrodło rozwiń
W WinForms w kilku prostych krokach można dodać kolekcję obiektów, tak aby DataGridView wygenerował za nas kolumny odpowiedniego typu i z odpowiednim nagłówkiem. W całości wykonuje to poniższa funkcja Init(). Jest ona wywoływana z konstruktora świeżo dodanej formatki Form1, która zawiera tylko dataGridView1.
Lematyzacja - pojęcie to a oznacza sprowadzenie grupy wyrazów stanowiących odmianę danego zwrotu do wspólnej postaci, umożliwiającej traktowanie ich wszystkich jako te samo słowo. W artykule omówię sposoby lematyzacji słów z języka angielskiego oraz przedstawię przykładową implementację algorytmu.
Sztuka programowania 4495 dni, 2 godziny, 42 minuty temu 333 źrodło rozwiń
Implementując w danej klasie kilka interfejsów możemy spotkać się z sytuacją, w której różne interfejsy będą posiadały składowe o tych samych nazwach. A co jeżeli metoda jednego z interfejsów ma inne przeznaczenie niż metoda innego i ich kod powinien być różny? Rozwiązaniem tego problemu jest jawna implementacja interfejsów.
Sztuka programowania 4494 dni, 43 minuty temu 103 źrodło rozwiń