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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 句柄数限制_linux文件句柄数

    linux 句柄数限制_linux文件句柄数一个部署到linux下的中间件项目,当收到一个Client登录的时候,需要为这个Client打开四个文件,当进行多用户的大压力测试的时候,程序就出问题了:toomanyopenedfiles。网上一查,发现有人也碰到过类似的socket/File:Can’topensomanyfiles问题。在此总结一下这个问题,希望对后来之人有点帮助。解决之法:1,ulimit…

    2022年10月18日
    4
  • 《Pro Android Graphics》读书笔记之第三节

    《Pro Android Graphics》读书笔记之第三节

    2021年12月14日
    42
  • 使用 Windows Live Writer[通俗易懂]

    使用 Windows Live Writer[通俗易懂]导航1.安装2.配置3.使用入门4.技巧1.安装绿色版下载地址:http://www.xdowns.com/soft/1/16/2007/Soft_38256.html2.配置以下内容是配置CSDN博客(其他的BLOG配置自己摸索):1.在WindowsLiveWriter,点击菜单“日志/添加日志账户”

    2022年10月7日
    2
  • python数组截取

    python数组截取importtensorflowastfimportnumpyasnp#one-dimentiona=np.array([0,1,2,3,4,5,6,7,8,9])print(a)b=a[:4]print(b)c=a[4:]print(c)#multi-dimentiond=np.array([[0,1,2,3,4,5,6,7,8,9],[1,2,3,4…

    2022年4月30日
    49
  • Unity安装 ILRuntime插件

    Unity安装 ILRuntime插件unity2019.4.2f1c1在packagemanager里面找不到ILRuntime插件解决办法:编辑项目下Packages的manifest.json文件,添加如下代码贴出来方便大家复制自己需要的部分{“scopedRegistries”:[{“name”:”ILRuntime”,”url”:”https://registry.npmjs.org”,”scopes”:[…

    2022年6月27日
    80
  • 数组去重的方法java_五种数组去重方法的性能比较「建议收藏」

    数组去重的方法java_五种数组去重方法的性能比较「建议收藏」为什么要写这篇文章之前参与面试一名外包程序员的时候,我要求他手写一个数组去重的方法,当时他使用了对象保存数值,通过查询去重。我表示表占用了空间,能不能只操作数组本身,减少空间占用。当时我想的是用indexOf和splice来操作数组,查询到index不等于i的时候,使用splice删除元素,之后自己跑了一遍发现函数执行时间非常长,所以想着研究一下效率比较高的去重方法。去重方法介…

    2022年6月18日
    39

发表回复

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

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