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类型,只有这个常数表达式的取值非负就行。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • R、RStudio下载与安装方法

    R、RStudio下载与安装方法现如今,R语言是统计领域广泛使用的工具,是属于GNU系统的一个自由、免费、源代码开放的软件,是用于统计计算和统计绘图的优秀工具。而RStudio是R的集成开发环境,用它进行R编程的学习和实践会更加轻松和方便。下面就教大家如何下载并安装R和RStudio,比较简单。R的维护工作由一个国际化的开发者团队负责。R软件的官方下载页面叫作TheComprehensiveRArchiveNetwor…

    2022年6月30日
    46
  • 华为的OD,值得去吗?「建议收藏」

    华为的OD,值得去吗?「建议收藏」最近有不少小伙伴接到了华为OD的面试邀约,但搞不清楚OD到底怎么回事儿,要不要去。所以今天来说说华为的OD到底是怎么回事儿,怎么判断是否值得去。1、华为的OD是怎么回事儿OD,是OutsourcingDispacth的缩写,简单粗暴地讲,就是外包派遣,劳务派遣。基本模式是这样的: A公司是外包公司(或劳务派遣公司,或人力资源公司); A公司签了一堆人,程序…

    2022年7月17日
    117
  • java递归查询数据库数据[通俗易懂]

    java递归查询数据库数据[通俗易懂]先查询第一层的数据,然后调用递归循环第一层的数据,查询父Id等于第一层的Id,执行完成后第一层一下的所有数据就全部查询出来了。。。publicList<Information>getTreeList(IntegertopId){ Stringhql="fromInformationwhereisDelete=2andid="+topId; List&l…

    2025年11月23日
    2
  • Python中如何定义变量类型_python流程控制的方式类型

    Python中如何定义变量类型_python流程控制的方式类型在python学习过程中会用到许多数据,那为了方便操作,需要把这些数据分别用一个简单的名字代表,方便在接下来的程序中引用。变量就是代表某个数据(值)的名称。python变量赋值如何定义操作注:py

    2022年8月5日
    5
  • 如何运行PHP代码_运行php网站

    如何运行PHP代码_运行php网站如何运行php代码相信不少初学者会遇到不知道如何运行php这个尴尬的问题,小白博主就来一次比较详细的介绍第一步:下载Wampserverwarmserver提供了php运行的环境,安装的步骤这里就不给出了,百度一下会有的。http://www.wampserver.com/下载Wampserver传送门第二步:写一段简单的php代码

    2022年10月2日
    1
  • 图形数字推理1000题及答案_小学奥数图形推理题

    图形数字推理1000题及答案_小学奥数图形推理题事情是这样滴!一个小伙伴在这两天提出一个问题如下:考虑到数字推理是浙江省考每年的必考题,图形题在去年的浙江省考中考查了四题。而图形题相较于分数数列、递推数列、多级数列等常见纯数字数列来说,在没有掌握一些常见技巧的前提下确实无从下手。这两天经过对图形题的系统性梳理发现其中有一些可操作的技巧与方法,希望能够帮助到即将踏入战场的浙江的小伙伴。当然,除了浙江的小伙伴之外,一些自主命题省份,如江苏、广东、吉…

    2025年10月15日
    3

发表回复

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

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