Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A felhasználó által definiált típus definiálhat egyéni implicit vagy explicit konverziót egy másik típusból vagy típusba. 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 felhasználó által definiált konverziókat az is és operátorok nem tekintik. Felhasználó által definiált explicit konverzió meghívásához használjon öntött kifejezést .
Az implicit vagy explicit
explicit konverzió definiálásához használja az operator
és implicit
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 átalakítás a két típus egyikében definiálható.
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
}
}
A C# 11-től kezdődően definiálhat ellenőrzött explicit konverziós operátorokat. 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