13.1 Implicit conversions

13.1 Implicit conversions13.1ImplicitconversionsThefollowingconversionsareclassifiedasimplicitconversions:?Identityconversions?Implicitnumericconversions?Implicitenumerationconversions.?Implicitreferenceconver

大家好,欢迎来到IT知识分享网。

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.

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23749.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信