13.1 Implicit conversions

13.1 Implicit conversions

The following conversions are classified as implicit conversions:
?Identity conversions
?Implicit numeric conversions
?Implicit enumeration conversions.
?Implicit reference conversions
?Boxing conversions
?Implicit constant expression conversions
?User-defined implicit conversions
Implicit conversions can occur in a variety of situations, including
function member invocations (?4.4.3),
cast expressions (?4.6.6), and assignments (?4.13).
The pre-defined implicit conversions always succeed and never cause
exceptions to be thrown. [Note:
Properly designed user-defined implicit conversions should exhibit these
characteristics as well. end note]
13.1.1 Identity conversion
An identity conversion converts from any type to the same type. This
conversion exists only such that an
entity that already has a required type can be said to be convertible to
that type.
13.1.2 Implicit numeric conversions
The implicit numeric conversions are:
?From sbyte to short, int, long, float, double, or decimal.
?From byte to short, ushort, int, uint, long, ulong, float, double, or
decimal.
?From short to int, long, float, double, or decimal.
?From ushort to int, uint, long, ulong, float, double, or decimal.
?From int to long, float, double, or decimal.
?From uint to long, ulong, float, double, or decimal.
?From long to float, double, or decimal.
C# LANGUAGE SPECIFICATION
114
?From ulong to float, double, or decimal.
?From char to ushort, int, uint, long, ulong, float, double, or decimal.
?From float to double.
Conversions from int, uint, long or ulong to float and from long or ulong
to double may cause a
loss of precision, but will never cause a loss of magnitude. The other
implicit numeric conversions never
lose any information.
There are no implicit conversions to the char type, so values of the other
integral types do not automatically
convert to the char type.
13.1.3 Implicit enumeration conversions
An implicit enumeration conversion permits the decimal-integer-literal 0 to
be converted to any enum-type.
13.1.4 Implicit reference conversions
The implicit reference conversions are:
?From any reference-type to object.
?From any class-type S to any class-type T, provided S is derived from T.
?From any class-type S to any interface-type T, provided S implements T.
?From any interface-type S to any interface-type T, provided S is derived
from T.
?From an array-type S with an element type SE to an array-type T with an
element type TE, provided all
of the following are true:
S and T differ only in element type. In other words, S and T have the same
number of dimensions.
Both SE and TE are reference-types.
An implicit reference conversion exists from SE to TE.
?From any array-type to System.Array.
?From any delegate-type to System.Delegate.
?From any array-type or delegate-type to System.ICloneable.
?From the null type to any reference-type.
The implicit reference conversions are those conversions between
reference-types that can be proven to
always succeed, and therefore require no checks at run-time.
Reference conversions, implicit or explicit, never change the referential
identity of the object being
converted. [Note: In other words, while a reference conversion may change
the type of the reference, it never
changes the type or value of the object being referred to. end note]
13.1.5 Boxing conversions
A boxing conversion permits any value-type to be implicitly converted to
the type object or
System.ValueType or to any interface-type implemented by the value-type.
Boxing a value of a valuetype
consists of allocating an object instance and copying the value-type value
into that instance. A struct
can be boxed to the type System.ValueType, since that is a base class for
all structs (?8.3.2).
Boxing conversions are described further in ?1.3.1.
13.1.6 Implicit constant expression conversions
An implicit constant expression conversion permits the following
conversions:
Chapter 13 Conversions
115
?A constant-expression (?4.15) of type int can be converted to type
sbyte, byte, short, ushort,
uint, or ulong, provided the value of the constant-expression is within the
range of the destination
type.
?A constant-expression of type long can be converted to type ulong,
provided the value of the constantexpression
is not negative.
13.1.7 User-defined implicit conversions
A user-defined implicit conversion consists of an optional standard
implicit conversion, followed by
execution of a user-defined implicit conversion operator, followed by
another optional standard implicit
conversion. The exact rules for evaluating user-defined conversions are
described in ?3.4.3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值