C # to wieloparadygmatyczny, zarządzany obiektowy język programowania ze zbieraniem elementów bezużytecznych stworzony przez firmę Microsoft równolegle z platformą .NET
Więc nie wiem, czy to dobry, czy zły projekt kodu, więc pomyślałem, że lepiej zapytam. Często tworzę metody, które przetwarzają dane z wykorzystaniem klas i często przeprowadzam wiele kontroli metod, aby upewnić się, że nie otrzymam pustych referencji lub innych błędów. Dla bardzo podstawowego przykładu: // fields and properties private …
Downcasting oznacza rzutowanie z klasy podstawowej (lub interfejsu) do podklasy lub klasy liścia. Przykładem downcast może być rzutowanie z System.Objectinnego typu. Downcasting jest niepopularny, może pachnie kodem: doktryna obiektowa preferuje na przykład definiowanie i wywoływanie metod wirtualnych lub abstrakcyjnych zamiast downcastingu. Jakie, jeśli w ogóle, są dobre i właściwe przypadki …
Zacząłem pracować w firmie, która jest głównie zorientowana na C #. Mamy kilka osób, które lubią Javę i JRuby, ale większość programistów tutaj lubi C #. Zostałem zatrudniony, ponieważ mam duże doświadczenie w tworzeniu aplikacji internetowych i ponieważ skłaniam się ku nowszym technologiom, takim jak JRuby on Rails lub nodejs. …
Staram się w jak największym stopniu przestrzegać zasady jednolitej odpowiedzialności (SRP) i przyzwyczaiłem się do pewnego wzorca (dla SRP dotyczącego metod), w dużej mierze polegającego na delegatach. Chciałbym wiedzieć, czy to podejście jest dobre, czy też są z nim jakieś poważne problemy. Na przykład, aby sprawdzić dane wejściowe do konstruktora, …
Niedawno zacząłem pracować w miejscu z kilkoma znacznie starszymi programistami (około 50+). Pracowali nad krytycznymi aplikacjami dotyczącymi lotnictwa, w których system nie mógł ulec awarii. W rezultacie starszy programista ma tendencję do kodowania w ten sposób. Zwykle umieszcza w obiektach wartość logiczną, aby wskazać, czy wyjątek powinien zostać zgłoszony, czy …
Kilka miesięcy temu zaczęliśmy opracowywać aplikację do kontroli opracowanego przez nas sprzętu testowego i rejestrować zestaw pomiarów. Powinien mieć prosty interfejs użytkownika i prawdopodobnie wymagałby wątków ze względu na ciągłe nagrywanie, które musi mieć miejsce. Ta aplikacja będzie używana przez kilka lat i będzie utrzymywana przez wielu studentów informatyki w …
W Visual Studio mogę kliknąć interfejs prawym przyciskiem myszy i wybrać opcję Implementuj interfejs lub Implementuj interfejs jawnie. public class Test : ITest { public string Id // Generated by Implement Interface { get { throw new NotImplementedException(); } } string ITest.Id // Generated by Implement Interface Explicitly { get …
Co jest łatwiejsze do zrozumienia, duża instrukcja boolowska (dość złożona) lub ta sama instrukcja w podziale na metody predykatów (dużo dodatkowego kodu do odczytania)? Opcja 1, duże wyrażenie logiczne: private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal) { return propVal.PropertyId == context.Definition.Id && !repo.ParentId.HasValue || repo.ParentId == propVal.ParentId && ((propVal.SecondaryFilter.HasValue && …
Dzisiaj pokłóciłem się z kimś. Wyjaśniałem zalety posiadania bogatego modelu domeny w przeciwieństwie do anemicznego modelu domeny. I pokazałem swój punkt w prostej klasie wyglądającej tak: public class Employee { public Employee(string firstName, string lastName) { FirstName = firstName; LastName = lastname; } public string FirstName { get private set; …
Jestem nieco zdezorientowany dokumentacji MSDN C #, który stanowi, że &i |są operatory logiczne i że &&i ||są operatory warunkowe. Ciągle dzwoni &&, ||a !operatory logiczne, więc nie mam racji?
W Javie nie istnieją virtual, new, overridekluczowe dla określenia metody. Tak więc działanie metody jest łatwe do zrozumienia. Ponieważ jeśli DerivedClass rozszerza BaseClass i ma metodę o tej samej nazwie i tej samej sygnaturze BaseClass, wówczas nadpisanie nastąpi w czasie polimorfizmu w czasie wykonywania (pod warunkiem, że metoda nie jest …
Pracuję w sklepie .Net, C # i mam współpracownika, który nalega, abyśmy używali gigantycznych instrukcji Switch w naszym kodzie z dużą ilością „przypadków”, a nie zorientowanych obiektowo. Jego argument konsekwentnie powraca do faktu, że instrukcja Switch kompiluje się do „tabeli skoków procesora” i dlatego jest najszybszą opcją (chociaż w innych …
Istnieją pewne problemy, które można łatwo rozwiązać za pomocą Algebraicznych typów danych, na przykład typ listy można bardzo zwięźle wyrazić jako: data ConsList a = Empty | ConsCell a (ConsList a) consmap f Empty = Empty consmap f (ConsCell a b) = ConsCell (f a) (consmap f b) l = …
Mój styl kodowania dla zagnieżdżonych wywołań funkcji jest następujący: var result_h1 = H1(b1); var result_h2 = H2(b2); var result_g1 = G1(result_h1, result_h2); var result_g2 = G2(c1); var a = F(result_g1, result_g2); Niedawno zmieniłem na dział, w którym bardzo często stosuje się następujący styl kodowania: var a = F(G1(H1(b1), H2(b2)), G2(c1)); …
ostatnio natknąłem się na ten post na blogu od potworów asp.net, który mówi o problemach z używaniem HttpClientw następujący sposób: using(var client = new HttpClient()) { } Zgodnie z postem na blogu, jeśli usuwamy HttpClientpo każdym żądaniu, może utrzymać otwarte połączenia TCP. Może to potencjalnie prowadzić do System.Net.Sockets.SocketException. Prawidłowym sposobem …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.