- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编写隐式和显式类型转换运算符很简单。
我可以找到很多关于如何编写它们的文档,但关于何时的文档很少,或者为什么要写它们。
我已经对现有的实现进行了一些调查;例如,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/
我是一名优秀的程序员,十分优秀!