C# 隐式转换_php隐式转换

C# 隐式转换_php隐式转换下面几种类型的转换被称之为隐式转换同一性转换 隐式数值转换 隐式枚举转换 隐式引用转换 包装转换 隐式常数表达式转换 用户自定义隐式转换隐式转换可以在很多种情况下发生,包括函数子句调用,cast计算表达式和赋值语句。预定义的隐式转换总会成功而且不会引发异常,适当合理的用户自定义隐式转换也可以展示出这些特性。一.同一性转换同一性…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

下面几种类型的转换被称之为隐式转换 

  • 同一性转换 
  • 隐式数值转换 
  • 隐式枚举转换 
  • 隐式引用转换 
  • 包装转换 
  • 隐式常数表达式转换
  • 用户自定义隐式转换

隐式转换可以在很多种情况下发生,包括函数子句调用,cast计算表达式和赋值语句。

预定义的隐式转换总会成功而且不会引发异常,适当合理的用户自定义隐式转换也可以展示出这些 特性。

 

一. 同一性转换

同一性转换把任何类型转换为统一的类型。只有在所需转换的实体可以被转换到一种特定的类型时才可以进行同一性转换。

 

二. 隐式数值转换

隐式数值转换可以在下面类型中发生:

• 从 sbyte 到 short, int, long, float, double 或 decimal。

从 byte 到 short, ushort, int, uint, long, ulong, float, double 或 decimal。

从 short 到 int, long, float, double 或 decimal。

从 ushort 到 int, uint, long, ulong, float, double 或 decimal。

从 int 到 long, float, double 或 decimal。

从 uint 到 long, ulong, float, double 或 decimal。

从 long 到 float, double 或 decimal。

从 ulong 到 float, double 或 decimal。

从 char到 ushort,int,uint, long, ulong, float, double 或 decimal。

从 float到 double。

从 int,uint,long到float以及从long到double类型的转换可能会造成精度的损失,但并不会造成数量上的损失。除此之外的其他隐式数值转换不会损失任何信息。这里不存在转到 char类型的隐式数值转换,也就是说其他的整型数据不会被自动地转换为字符型数据。

 

三. 隐式枚举转换

一个隐式枚举转换允许小数-整数实字(decimal-integer-literal)被转换成任意的枚举类型。

 

四. 隐式引用转换

隐式 reference转换可以在下面类型之间发生:

• 从任意 引用类型 到对象 。

从任意 类类型 S 到任意 类类型 T, 只要 S 是由 T 派生出来的。

从任意 类类型 S 到任意 接口类型 T, 只要 S 实现 T。

从任意 接口类型 S 到任意 接口类型 T, 只要 S 是由 T 派生出来的。

从一个带有元素类型 S 的 数组类型 S 到一个带有元素类型 T 的 数组类型 T,只要下述各项均成立:

S 和 T 只是元素类型不同。换句话说,S 和 T 有相同的维度。

SE 和 TE 都是 引用类型 。

存在从 SE 到 TE 隐式引用转换。

从任意 数 组类型 到 System.Array。

从任意 代 表类型 到 System.Delegate。

从任意 数 组类型 或 代表类型 到 System.Icloneable。

从 null类型到任意 引用类型 。.

隐式引用转换指的是在引用类型间肯定可以成功的类型转换,它们是不需要实时检测的。

引用转换,不管是显式或是隐式的都不会改变被转换对象的引用一致性。换句话说,当引转换发生时,它并未改变被转换对象的数值。

 

五. 包装转换

包装转换允许任何数值类型被隐式地转换为类型对象,或者任何由这个数值类型实现的接口类型。 包装一个数值类型的数值包括分配一个对象实例并且将数值类型的数值复制到实例当中。

包装数值类型的数据的实际过程,可以通过想像一个对那种类型的包装类的实际例子来解释。对于数值类型 T,包装类要按下面定义:

class T_Box
{
    T value;
    T_Box(T t)
    {
        value = t;
    }
}

对于类型 T的数值 v的包装现在由执行表达式 T_Box(v)来代替,并且返回类型为 object的结果实例。这样,语句

int i = 123;

object box = i;

从概念上符合

int i = 123;

object box = new int_Box(i);

如上面的 T_Box 和 int_Box 的包装类型实际不存在,而被包装数据的动态类型实际上并不是一个类类型。作为替代,类型T 的一个被包装的数据有动态类型T,而使用 is 操作符的动态类型检查可以很方便地引用T。例如

int i = 123; 
object box = i; 
if (box is int) {  
   Console.Write("Box contains an int"); 
}

将在控制台输出字符串 Box contains an int

包装转换隐式地把被包装的数据进行了备份。这与从引用类型到object类型的转换不同,在那里数据一直引用相同的实例,并被认为几乎不从类型 object派生。例如,给出声明

struct Point
{
    public int x, y;
    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

下面的语句

Point p = new Point(10, 10);

object box = p;

p.x = 20;

Console.Write(((Point)box).x);

因为在发生把 p赋值给 box的隐含包装操作时,p被拷贝,所以将在控制台上输出数值 10。如果Point被声明为一个类,因为p和box将引用相同的实例,就会输出20。

六. 隐式常数表达式转换

        常量表达式的类型可以是以下类型之一:sbyte、byte、short、ushort、int、uint、long、ulong、 char、float、double、decimal、bool、string、枚举类型或空(null)类型。

隐式常数表达式转换允许下列类型的转换:

  1. 整型常数表达式可以被转换成为 sbyte,byte,short,ushort,uint或者 ulong类型,只有这个整型常数表达式的数值未超出目标类型的取值范围就行。 
  2. 一个 long类型的常数表达式可以被转换成为 ulong类型,只有这个常数表达式的取值非负就行。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183705.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JS数据类型_JS数据类型之引用数据类型

    JS数据类型_JS数据类型之引用数据类型最近有很多人说数据类型是6种。我怎么记得JS的数据类型有8种。最近发现好多人对JS的基础不太了解。很多数据类型都没有搞清楚。不BB,我就按我的理解写一波笔记,每次看一波书我就感觉一次比一次多懂一点。来补下知识点。。。。JS数据类型:基础概念请注意:JS的数据类型有8种。在ES5的时候,我们认知的数据类型确实是6种:Number、String、Boolean、undefined、o…

  • 树形结构的数据库表设计

    树形结构的数据库表设计树形结构的数据库表Schema设计   程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,因此是不能直接将Tree存入DBMS,设计合适的Schema及其对应的CRUD算法是实现关系型数据库中存储树形结构的关键。   理想中树…

  • c语言中fprintf_c语言输出函数printf

    c语言中fprintf_c语言输出函数printf目录一.fprintf函数简介二.fprintf函数使用三.猜你喜欢零基础C/C++学习路线推荐:C/C++学习目录>>C语言基础入门一.fprintf函数简介fprintf是C/C++中的一个格式化库函数,位于头文件中,其作用是格式化输出到一个流文件中;函数原型为/**描述:fputs函数是向指定的文件写入一个字符串**参数:*[in]stream:文件指针句柄;*[in]format:格式化字符串,

    2022年10月10日
  • 最全的大数据采集方法分类

    最全的大数据采集方法分类数据采集的设计,几乎完全取决于数据源的特性,毕竟数据源是整个大数据平台蓄水的上游,数据采集不过是获取水源的管道罢了。一、大数据环境下的数据处理需求大数据环境下数据来源非常丰富且数据类型多…

  • 网页音乐播放器代码

    网页音乐播放器代码网页音乐播放器代码如果你也想往自己的博客里,网页里加入音乐播放器,只要复制下面的网页音乐播放器代码,做适当的修改就可以啦!有很多播放器可以选择,不要挑花眼哦!中true或1表示自动播放,false或0表示手动播放loop=”true”中的true或1表示重复播放,f

  • anaconda卸载环境[通俗易懂]

    anaconda卸载环境[通俗易懂]如果是用anaconda新建了一个环境(比如原生py2.7版本的anaconda,新建了一个py3.6的环境),现在要将py3.6卸载,也就是将这个环境、包括第三方库和python3.6本身都删除,那么可以这样做:1.打开anaconda自带的命令行工具2.确保当前激活的环境不是你要卸载的环境,如果是,那么需要运行:activatexxxxxx是其他环境名,切换到其他环境3….

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号