c# – 投射,拆箱,转换..?
最近我正在学习价值类型,我有点困惑.同时,转换和拆箱都使用相同的语法 – (预期类型)(对象),对吧?
那么类型之间的简单转换呢,即转换或转换? int x = (int)2.5; //casting? object a=x; int Y=(int)a; //unboxing I think Random r=new Random(); object X=r; Random R=(Random)X; // casting 解决方法
这里有很多事情需要考虑,但让我们先解决最简单的问题:
什么是语法(类型)表达式? 嗯,在它的基本形式,它被认为是铸造.您将表达式从一种类型转换为另一种类型.而已. 然而,究竟发生了什么,这取决于类型和许多其他事情. 如果将值类型转换为其他类型,则依赖于所涉及的两种类型之一来声明处理此类型的转换运算符.换句话说,值类型需要定义可以转换为其他类型的转换运算符,或者其他类型需要定义可以从原始类型转换的转换运算符. 该运算符的作用取决于该运算符的作者.这是一种方法,所以它可以做任何事情. 将值类型转换为其他类型会为您提供不同的值,单独的值类型或新的引用类型,包含转换后的新数据. 例: int a = (int)byteValue; 当您在引用类型(通常是对象)或值类型实现的接口之一上转换值类型时,可以使用装箱和拆箱. 例: object o = intValue; // boxing int i = (int)o; // unboxing 拳击也在投射到界面时发挥作用.我们假设“someValueType”是一个结构,它也实现了IDisposable: IDisposable disp = (IDisposable)someValueType; // boxed 转换引用类型,也可以执行其他操作. 首先,您可以定义与值类型相关的相同的转换运算符,这意味着将一个引用类型转换为另一个引用类型可以返回一个全新的对象,其中包含完全不同类型的信息. 除非您将引用类型转换回值类型(参见上文),否则在投射引用类型时Boxing不起作用. 例: string s = (string)myObjectThatCanBeConvertedToAString; 或者,您可以重新解释引用,以便仍然引用相同的对象,但是您通过一副不同类型的眼镜来查看它. 例: IDisposable disp = (IDisposable)someDisposableObject; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |