gpt4 book ai didi

c# - 何时在 C# 中使用隐式和显式运算符

转载 作者:行者123 更新时间:2023-12-01 22:55:26 27 4
gpt4 key购买 nike

编写隐式和显式类型转换运算符很简单。

我可以找到很多关于如何编写它们的文档,但关于何时的文档很少,或者为什么要写它们。

我已经对现有的实现进行了一些调查;例如,BigInteger来自 .NET 的引用源:

public struct BigInteger : IFormattable, IComparable, IComparable<BigInteger>, IEquatable<BigInteger>
{
public static implicit operator BigInteger(Byte value)
{
return new BigInteger(value);
}

public static explicit operator Byte(BigInteger value)
{
return checked((byte)((int)value));
}
}

鉴于上面的摘录,在从 Byte 转换为 BigInteger 时使用 implicit 运算符的合理性是什么,但使用 BigInteger 转换为 Byte 时的显式 运算符?

最佳答案

正如我在评论中提到的,我的假设是隐式运算符应始终被认为是安全的,而显式运算符可能是安全的,但在某些情况下可能需要处理。

我找到了以下 documentation在预定义的隐式运算符上:

The pre-defined implicit conversions always succeed and never causeexceptions to be thrown.

Note: Properly designed user-defined implicit conversions shouldexhibit these characteristics as well. end note

此外,documentation对于显式转换不提供相同的保证:

The explicit conversions that are not implicit conversions areconversions that cannot be proven always to succeed, conversions thatare known possibly to lose information, and conversions across domainsof types sufficiently different to merit explicit notation.

这清楚地支持了我的假设,即隐式运算符必须始终是安全的并且永远不需要异常处理,而显式运算符可以并且确实会抛出异常,就像您的显式运算符示例中那样已检查

关于c# - 何时在 C# 中使用隐式和显式运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73378511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com