Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A felhasználó által definiált típus definiálhat egy egyéni implicit vagy explicit konverziót egy másik típusból vagy típusba, feltéve, hogy nem létezik szabványos átalakítás ugyanazon két típus között. Az implicit konverziók nem igényelnek speciális szintaxist, és különböző helyzetekben, például hozzárendelésekben és metódushívásokban fordulhatnak elő. Az előre definiált C# implicit konverziók mindig sikeresek, és soha nem vetnek kivételt. A felhasználó által definiált implicit konverzióknak is így kell viselkedniük. Ha egy egyéni átalakítás kivételt okozhat vagy adatokat veszíthet el, definiálja explicit konverzióként.
A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.
A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.
Jótanács
Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.
Az operátorok nem veszik figyelembe a felhasználó által definiált konverziókat. Felhasználó által definiált explicit konverzió meghívásához használjon öntött kifejezést .
Az implicit vagy operator explicit konverzió definiálásához használja az implicit és explicit a kulcsszavakat. Az átalakítást meghatározó típusnak forrástípusnak vagy az átalakítás céltípusának kell lennie. Két felhasználó által definiált típus közötti konverziót a két típus egyikében határozhatja meg.
Az alábbi példa bemutatja, hogyan definiálhat implicit és explicit konverziót:
using System;
public readonly struct Digit
{
private readonly byte digit;
public Digit(byte digit)
{
if (digit > 9)
{
throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
}
this.digit = digit;
}
public static implicit operator byte(Digit d) => d.digit;
public static explicit operator Digit(byte b) => new Digit(b);
public override string ToString() => $"{digit}";
}
public static class UserDefinedConversions
{
public static void Main()
{
var d = new Digit(7);
byte number = d;
Console.WriteLine(number); // output: 7
Digit digit = (Digit)number;
Console.WriteLine(digit); // output: 7
}
}
Az ellenőrzött explicit konverziós operátorokat definiálhatja. További információt az Aritmetikai operátorok cikk felhasználó által meghatározott ellenőrzött operátorok szakaszában talál.
A kulcsszóval operator egy előre definiált C# operátort is túlterhelhet. További információ: Operátorok túlterhelése.
C# nyelvspecifikáció
További információt a C# nyelvspecifikációjának alábbi szakaszaiban talál:
- Konverziós operátorok
- Felhasználó által definiált konverziók
- Implicit konverziók
- Explicit konverziók