Nowości w C# 7.2

No cóż nic dodać nic ująć. Tyle nowych wersji języka, że niedługo powstanie z tego certyfikat. C# mocno przyspieszył z wydawanie nowych wersji. Kolejna główna wersja C# 8.0 jest już gotowana i start jest planowany na 2019 rok. A teraz zapraszam na omówienie nowości w wersji C# 7.2

Spis treści

 

Nowe narzędzia do pisania efektywnego kodu

Gdy ktoś mnie pyta o co chodzi w tych zmianach, zawsze najpierw uświadamiam jaka klasa problemów wiążą się z tymi zmianami. Otóż, jest pewna grupa problemów do rozwiązania i efektywnego napisania, która pracuje na typach prymitywnych. Nie korzysta z list (List<T>) ale z  tablic T[]. Dlaczego? Ponieważ listy dobrze się sprawdzają w problemach wysokopoziomowych, najczęściej biznesowych. Jednak przy algorytmach niskopoziomowych narzut interfejsu IEnumerable<T> jest już zbyt duży i nie efektywny. Dlatego właśnie pracuje się bardziej wydajnie na prostszych typach.

Poniżej lista nowych narzędzi, które pozwalają bardziej efektywnie tworzyć algorytmy:

  • Słowo kluczowe in. Jest to po słowach ref i out kolejny sposób przekazywania parametrów do metody. Oznacza on, że parametr jest przekazywany przez referencję ale nie jest modyfikowany przez metodę.
  • Składnia ref readonly pozwala na zwrócenie zmiennej przez referencję i uniemożliwia jej modyfikacji.
  • Składania readonly struct pozwala na stworzenie nie zmiennej struktury. Czyli taka struktura powinna być przekazywana do metody poprzez słowo kluczowe in.

 

Zmiany w parametrach nazwanych

Wersja C# 7.2 wprowadza, możliwość podawania argumentów do metody bez wymieniana ich nazwy zaraz po argumentach nazwanych, gdy kolejność argumentu(nie nazwanego) się zgadza. Czyli taki przypadek się skompiluje:

        private void OptionalArguments()
        {
            // C # 7.2

            TestFunc(a: 2, "b", c: new Point());
        }

        private void TestFunc(int a, string b, Point? c = null)
        {

        }

Jak widać argument b jest podany bezpośrednio i jest po argumencie nazwanym i jego kolejność się zgadza więc kompilator może się domyślić który to jest.

Dlaczego to dobra i zła zmiana jednocześnie. Dobra, bo dla problemów niskopoziomowych, gdzie w metodach jest duża ilość parametrów takie podejście trochę ułatwi czytelność kodu. Dlaczego jest zła, bo ktoś może sobie pomyśleć, że przekazywanie do metody więcej niż 3 paramentów jest dobre i do tego język to wspiera więc to musi być dobre podejście.

Musze przyznać, że mimo, że sam nie stosuje dużej ilość parametrów w metodzie to bardzo często w aplikacjach biznesowych, spotykam się z takim podejściem. Metody po 10, 15 parametrów to jakiś koszmar. Do tego te metody i te parametry w takiej samej formie przechodzą przez 3 warstwy. Każda warstwa ma swój interfejs. I teraz pomyślcie sobie ile czasu zajmuje dodanie nowego parametru? Dużo.

Podkreślenie na początku wyrażenia

Podkreślenia w wartościach numerycznych wprowadzone w C# 7.0 umożliwiały wstawienie podkreślenia aby rozdzielić liczby na bardziej czytelne dla ludzi. Dla wartość hex i binarnych nie było można wstawić podkreślenia na początku wyrażenia (zaraz po 0b). Od teraz już można:

        private void NumericLiterals()
        {
            const int Sixteen =   0b_0001_0000;
            
            const int ThirtyTwo = 0b_0010_0000;
            
            const int SixtyFour = 0b_0100_0000;

            const int One =  0b_0001;

            const int Two =  0b_0010;
            
            const int Four = 0b_0100;
        }

Modyfikator dostępu private protected

Ostatnia zmiana to nowy modyfikator dostępu. Możemy od teraz zrobić tak, że widoczność elementów private protected będzie ograniczała się do klasy bazowej i do klasy dziedziczącej w tej samej bibliotece.

    public class A1 : B1
    {
        public A1()
        {
           base.Test();
        }
    }

    public class B1
    {
        private protected void Test()
        {

        }
    }

Podusmowanie

Kilka drobnych zmian i sporo nowych narzędzi pozwalających pisać wydajny i czytelny kod.

3 przemyślenia nt. „Nowości w C# 7.2

      1. Jestem w kwestii programowanie w C# absolutnie początkującym, więc raczej się nie wypowiem (przez jakiś czas – raczej długi), póki co się uczę i czytam blogi

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *