Novinky v jazyce C# 13

C# 13 obsahuje následující nové funkce. Tyto funkce můžete vyzkoušet pomocí nejnovější verze sady Visual Studio 2022 nebo sady .NET 9 Preview SDK.

C# 13 je podporován v .NET 9. Další informace najdete v tématu Správa verzí jazyka C#.

Nejnovější sadu .NET Preview SDK si můžete stáhnout ze stránky pro stahování .NET. Můžete si také stáhnout Sadu Visual Studio 2022 – Preview, která zahrnuje sadu .NET 9 Preview SDK.

Nové funkce se přidají na stránku Co je nového v jazyce C#, když jsou dostupné ve verzích Public Preview. Oddíl pracovní sadystránky stavu funkce roslyn sleduje, kdy se nadcházející funkce sloučí do hlavní větve.

Poznámka:

Zajímá nás vaše názory na tyto funkce. Pokud zjistíte problémy s některou z těchto nových funkcí, vytvořte v úložišti dotnet/roslyn nový problém.

Nová řídicí sekvence

Jako znakovou řídicí sekvenci můžete použít \eřídicí sekvenci znakuESCAPE, Unicode U+001B. Dříve jste použili \u001b nebo \x1b. Použití \x1b se nedoporučuje, protože pokud následující další znaky 1b byly platné šestnáctkové číslice, tyto znaky se staly součástí řídicí sekvence.

Přirozený typ skupiny metod

Tato funkce provádí malé optimalizace pro přetížení rozlišení zahrnující skupiny metod. Předchozí chování bylo pro kompilátor vytvořit úplnou sadu kandidátských metod pro skupinu metod. Pokud byl nutný přirozený typ, byl přirozený typ určen z celé sady kandidátských metod.

Nové chování spočívá v vyřazení sady kandidátských metod v každém oboru a odebráním metod kandidáta, které nejsou použitelné. Obvykle se jedná o obecné metody s nesprávným zápisem nebo omezeními, která nejsou splněna. Proces pokračuje k dalšímu vnějšímu oboru pouze v případě, že nebyly nalezeny žádné kandidátské metody. Tento proces se podrobněji řídí obecným algoritmem pro řešení přetížení. Pokud se všechny kandidátské metody nalezené v daném oboru neshoduje, skupina metod nemá přirozený typ.

Podrobnosti o změnách ve specifikaci návrhu si můžete přečíst.

Implicitní přístup k indexu

Implicitní operátor indexu "from the end" je ^nyní povolen ve výrazu inicializátoru objektů. Teď můžete například inicializovat pole v inicializátoru objektů, jak je znázorněno v následujícím kódu:

var v = new S()
{
    buffer =
    {
        [^1] = 0,
        [^2] = 1,
        [^3] = 2,
        [^4] = 3,
        [^5] = 4,
        [^6] = 5,
        [^7] = 6,
        [^8] = 7,
        [^9] = 8,
        [^10] = 9
    }
};

Ve verzích starších než C# 13 ^ nelze operátor použít v inicializátoru objektů. Musíte indexovat prvky z přední části.

Viz také