Novinky C# 12

22. 1. 2024

Sdílet

C Sharp Autor: C Sharp Logo, podle licence: Public Domain

S novou verziou vývojovej platformy .NET 8 vyšiel aj jazyk C# 12. Na rozdiel od posledných pár rokov, keď jazyk prešiel dramatickými zmenami, najnovšia verzia prináša len zopár zmien. Ukážeme si tri podstatnejšie zmeny.

Primárne koštruktory umožňujú zjednodušiť tvorbu koštruktorov tried a štruktúr. V príklade použijeme parametre name a occupation pri inicializácii atribútov. Explicitná definícia koštruktora sa vypustila.

var users = new HashSet<User>
{
    new ("John Doe", "gardener"),
    new ("Roger Roe", "driver"),
    new ("Lucy Smith", "teacher")
};

var u = new User("John Doe", "gardener");
Console.WriteLine(users.Contains(u));

class User(string name, string occupation)
{
    string Name { get; } = name;
    string Occupation { get; } = occupation;

    public override bool Equals(object? obj)
    {
        return obj is User user &&
               Name == user.Name &&
               Occupation == user.Occupation;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Occupation);
    }
}

Collection expressions zjednodušujú a štandardizujú definíciu zoznamov, polí a span štruktúr. Vývojári už v minulých verziách výrazne zjednodušili definíciu zoznamov. V najnovšej verzii môžeme použiť na inicializáciu zoznamov a polí syntax [1, 2, 3, 4], čo je štandardom v mnohých, predovšetkým dynamických jazykoch. Uvažuje sa nad použitím syntaxe aj pre slovníky.

List<int> vals = new List<int>() { 1, 2, 3, 4, 5 };
Console.WriteLine(vals[0]);

List<int> vals2 = new() { 1, 2, 3, 4, 5 };
Console.WriteLine(vals2[^1]);

List<int> vals3 = [1, 2, 3, 4, 5];
Console.WriteLine(vals3.Max());

int[] vals4 = [1, 2, 3, 4, 5];
Console.WriteLine(vals4.Min());

Lambda výrazy podporujú implicitne definované parametre. Tie sa potom nemusia pri invokácii delegátov uviesť. Musia byť uvedené až na konci deklarovaných parametrov.

var message = (string greet, string name = "there") =&gt $"{greet} {name}!";

var res = message("Hi", "Tom");
Console.WriteLine(res);

var res2 = message("Hello");
Console.WriteLine(res2);

Tato zprávička byla zaslána čtenářem serveru Root.cz pomocí formuláře Přidat zprávičku. Děkujeme!

Našli jste v článku chybu?

Autor zprávičky