implicit 關(guān)鍵字用于聲明隱式的用戶定義類型轉(zhuǎn)換運(yùn)算符尖坤。 如果可以確保轉(zhuǎn)換過程不會造成數(shù)據(jù)丟失,則可使用該關(guān)鍵字在用戶定義類型和其他類型之間進(jìn)行隱式轉(zhuǎn)換澳化。
class Digit
{
public Digit(double d) { val = d; }
public double val;
// ...other members
// User-defined conversion from Digit to double
public static implicit operator double(Digit d)
{
return d.val;
}
// User-defined conversion from double to Digit
public static implicit operator Digit(double d)
{
return new Digit(d);
}
}
class Program
{
static void Main(string[] args)
{
Digit dig = new Digit(7);
//This call invokes the implicit "double" operator
double num = dig;
//This call invokes the implicit "Digit" operator
Digit dig2 = 12;
Console.WriteLine("num = {0} dig2 = {1}", num, dig2.val);
Console.ReadLine();
}
}
隱式轉(zhuǎn)換可以通過消除不必要的強(qiáng)制轉(zhuǎn)換來提高源代碼的可讀性。 但是村视,因?yàn)殡[式轉(zhuǎn)換不需要程序員將一種類型顯式強(qiáng)制轉(zhuǎn)換為另一種類型伊磺,所以使用隱式轉(zhuǎn)換時(shí)必須格外小心盛正,以免出現(xiàn)意外結(jié)果。 一般情況下屑埋,隱式轉(zhuǎn)換運(yùn)算符應(yīng)當(dāng)從不引發(fā)異常并且從不丟失信息豪筝,以便可以在程序員不知曉的情況下安全使用它們。 如果轉(zhuǎn)換運(yùn)算符不能滿足那些條件雀彼,則應(yīng)將其標(biāo)記為 explicit壤蚜。
參考:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/implicit