Olvasás angol nyelven

Megosztás a következőn keresztül:


A C# 14 újdonságai

A C# 14 az alábbi új funkciókat tartalmazza. Ezeket a funkciókat kipróbálhatja a legújabb Visual Studio 2022 verzióval vagy a .NET 10 SDK verzióval:

A C# 14 támogatást élvez .NET 10-en. További információért lásd: C# nyelv verziószámozás.

A legújabb .NET 10 SDK-t a .NET letöltési oldaláról töltheti le. Letöltheti Visual Studio 2022is, amely tartalmazza a .NET 10 SDK-t is.

Az új funkciók akkor jelennek meg a "Újdonságok a C#-ban" oldalon, ha nyilvános előzetes kiadásban érhetők el. A roslyn funkció állapotlapjának munkakészlet szakasza nyomon követi, ha a közelgő funkciók egyesülnek a főággal. Ez a cikk legutóbb a .NET 10 1. előzetes verziójához lett frissítve.

A C# 14-ben bevezetett bármely kompatibilitástörő változást a kompatibilitástörő változásokrólszóló cikkünkben találja.

Megjegyzés

Szeretnénk visszajelzést küldeni ezekről a funkciókról. Ha problémákat talál az új funkciók bármelyikével kapcsolatban, hozzon létre egy új problémát, a dotnet/roslyn adattárban.

A field kulcsszó

A token field lehetővé teszi egy tulajdonság-hozzáférő törzsének megírását explicit háttérmező deklarálása nélkül. A field token egy fordító által szintetizált háttértáblára kerül cserélésre.

Korábban például, ha azt akarta biztosítani, hogy egy string tulajdonság ne lehessen null, deklarálnia kellett egy háttérmezőt, és mindkét elérési metódust (getter és setter) implementálnia kellett.

private string _msg;
public string Message
{
    get => _msg;
    set => _msg = value ?? throw new ArgumentNullException(nameof(value));
}

Mostantól egyszerűbbé teheti a kódot a következőre:

public string Message
{
    get;
    set => field = value ?? throw new ArgumentNullException(nameof(value));
}

A mező alapú tulajdonsághoz deklarálhat törzset az egyik vagy mindkét hozzáférési metódus számára.

Előfordulhat, hogy kompatibilitástörés vagy zavart kelthet a kód olvasása olyan típusokban, amelyek fieldnevű szimbólumot is tartalmaznak. A @field vagy this.field használatával egyértelműsítheti a field kulcsszót és az azonosítót, vagy átnevezheti az aktuális field szimbólumot a jobb megkülönböztetés érdekében.

Ha kipróbálja ezt a funkciót, és visszajelzést szeretne küldeni, megjegyzést fűzhet a funkcióval kapcsolatos problémához, a csharplang adattárban.

A field környezeti kulcsszó a C# 13-ban van előzetes verziójú funkcióként.

Implicit span konverziók

A C# 14 első osztályú támogatást nyújt a nyelv System.Span<T> és System.ReadOnlySpan<T> számára. Ez a támogatás magában foglalja az új implicit átalakításokat, amelyek lehetővé teszik az ilyen típusú természetes programozást.

Span<T> és ReadOnlySpan<T> számos kulcsfontosságú módon használt a C#-ban és a futtatókörnyezetben. Bevezetésük a biztonság veszélyeztetése nélkül javítja a teljesítményt. A C# 14 felismeri a kapcsolatot, és támogatja a ReadOnlySpan<T>, Span<T>és T[]közötti átalakításokat. A span típusok lehetnek bővítménymetódus-fogadók, összekapcsolódhatnak más átalakításokkal, és segíthetnek általános típusú következtetési forgatókönyvekben.

Az implicit span konverziók listáját a nyelvi referencia szakaszban beépített típusok című cikkben találja. További részletekért olvassa el első osztályú spantípusokfunkcióspecifikációját.

Kötetlen általános típusok és nameof

C# 14-től kezdődően a nameof argumentuma lehet kötetlen generikus típus. Például a nameof(List<>) értéke List lesz. A C# korábbi verzióiban csak a lezárt általános típusok( például List<int>) használhatók a List nevének visszaadására.

Egyszerű lambdaparaméterek módosítókkal

Paramétermódosítókat, például scoped, ref, in, outvagy ref readonly adhat hozzá a lambda kifejezés paramétereihez a paramétertípus megadása nélkül:

delegate bool TryParse<T>(string text, out T result);
// ...
TryParse<int> parse1 = (text, out result) => Int32.TryParse(text, out result);

Korábban a módosítók hozzáadása csak akkor volt engedélyezett, ha a paraméterdeklarációk tartalmazzák a paraméterek típusait. Az előző deklaráció minden paraméterhez típusokat igényel:

TryParse<int> parse2 = (string text, out int result) => Int32.TryParse(text, out result);

A params módosítóhoz továbbra is explicit módon beírt paraméterlista szükséges.

Ezekről a változásokról a C# nyelvi referencia lambdakifejezésekről szóló cikkben olvashat bővebben.

Még több részleges tag

Mostantól példánykonstruktorokat és eseményeketrészleges tagokkéntdeklarálhatja.

A részleges konstruktoroknak és a részleges eseményeknek pontosan egy definíciós deklarációt és egy megvalósító deklarációtkell, hogy tartalmazzanak.

Csak részleges konstruktor implementálási deklarációja tartalmazhat konstruktor inicializálót: this() vagy base(). Csak egy részleges típusdeklaráció tartalmazhatja az elsődleges konstruktor szintaxisát.

A részleges esemény deklarációjának tartalmaznia kell a add és remove hozzáférőket. A definiáló deklaráció mezőszerű eseményt deklarál.

Lásd még