Zmiany w c# na przestrzeni lat

Udostępnij

Hej! Jeśli przez ostatnie parę lat utknąłeś w starszych wersjach .NET lub języka C#, to ten post będzie idealny dla Ciebie! Jeśli jesteś w miarę na bieżąco, może to być dobra okazja, żeby odświeżyć informacje.

Uważam, że zmiany, które zaszły w .NET przez ostatnie lata, to prawdziwe mistrzostwo i coś, czego platforma bardzo potrzebowała. Sam pomysł stworzenia .NET Core to był majstersztyk, a ja cieszę się, że mogłem śledzić postępy od samego początku. Pamiętam, jak wiele się zmieniało i jak dużo trzeba było modyfikować w projektach, żeby zaktualizować je do kolejnych wersji. Nie zniechęcajcie się jednak – takie trudności występowały głównie do czasu wydania pierwszej stabilnej wersji 1.0.

Dzięki temu projektowi platforma nie tylko została odświeżona i „odczepiona” od Windowsa (teraz możemy uruchamiać .NET na Linuxie i macOS), ale także sam język C# zaczął intensywnie ewoluować. Wprowadzono wiele świetnych funkcji, które uprzyjemniają codzienną pracę programistów.

Chciałbym przedstawić Wam najciekawsze (moim zdaniem) nowości, które znacząco ułatwiają mi codzienny development. Zobaczmy, co ciekawego pojawiło się w ostatnich latach!

Out Variables

W C# mieliśmy słówko kluczowe out, które było przydatne, gdy chcieliśmy zwrócić z metody więcej niż jeden parametr. Wcześniej, jeśli chcieliśmy użyć out, musieliśmy najpierw zadeklarować zmienną, a następnie przekazać ją do metody ze słówkiem out. Natomiast po wprowadzonych zmianach możemy teraz zadeklarować zmienną bezpośrednio podczas jej przekazywania do metody!

//stare podejście
int number;
int.TryParse("12", out number);
//nowe podejście 
int.TryParse("12", out var number);

Expression-bodied members

Możemy tego używać dla metod, właściwości i konstruktorów, co pozwala na skrócenie zapisu. Jest to szczególnie przydatne w przypadku prostych fragmentów kodu. Używamy symbolu =>, podobnie jak przy lambdach, dzięki czemu nie musimy umieszczać kodu w klamrach.

// metoda
public int Add(int a, int b) => a + b; 
// konstruktor
private Guid _id;
public IdProvider() => _id = Guid.NewGuid();
// readonly property 
public int Age => 25;
// property 
private string _email;
public string Email
{
    get => _email; 
    set => _email = value;
}

Literal improvements

Otrzymaliśmy kilka usprawnień, z których jedno z najważniejszych to string interpolation. Pozwala ono na dużo łatwiejsze „sklejanie” stringów przy użyciu wielu parametrów. Jest to świetna alternatywa dla string.Format, która, moim zdaniem, jest znacznie wygodniejsza w użyciu.

Kolejnym usprawnieniem jest możliwość stosowania znaku _ przy zapisie wartości liczbowych. Jest to szczególnie przydatne przy długich liczbach, ponieważ pozwala na ich bardziej czytelne przedstawienie.

// string interpolation
var fullName = $"{name} {surname}";
// digit separator
public int Million = 1_000_000_000;

Generic Atrributes

Czegoś takiego brakowało wielu osobom – sam kilka razy, dawno temu, próbowałem znaleźć sposób, aby kod wyglądał lepiej. W końcu się udało! Teraz można definiować atrybuty z typami generycznymi.

public class GenericAttribute<T> : Attribute
{
    public T Value { get; set; }
}

Init keyword

Tak jak przy właściwościach mieliśmy get i set, teraz otrzymaliśmy kolejne słowo kluczowe – init. Dzięki niemu możemy wymusić, aby wartość właściwości była ustawiana wyłącznie podczas inicjalizacji obiektu. Próba zmiany tej wartości na innym etapie skutkuje błędem.

public class Customer
{
    public string Name { get; init; }
}

var customer = new Customer
{
    Name = "Jakub"
};

customer.Name = "Kuba"; // Error - Init-only property

Podsumowanie

Język C# otrzymał wiele nowych usprawnień na przestrzeni ostatnich lat. Wymieniłem tylko kilka z nich, aby pobudzić Twoją ciekawość. Istnieje jednak wiele innych funkcjonalności, o których trudno byłoby napisać w formie skrótu – każda z nich zasługuje na osobny post, który planuję przygotować w najbliższej przyszłości:

  • Rekordy
  • Pattern Matching
  • Zmiany związane z kolekcjami

Listę wszystkich zmian można znaleźć tutaj. Postaram się również regularnie wracać na blogu do tych najbardziej interesujących.

Czytaj również  Dependency Injection - Services Lifetime
Scroll to Top