gpt4 book ai didi

c# - 类型转换,拆箱,转换..?

转载 作者:行者123 更新时间:2023-11-30 13:24:22 27 4
gpt4 key购买 nike

最近在学习值类型,有点迷茫。此外,转换和拆箱都使用相同的语法 - (expected type)(object),对吧?那么类型之间的简单转换呢,即强制转换或只是转换?

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

最佳答案

这里有很多事情需要考虑,但让我们先解决最简单的问题:

(type)expression 的语法是什么?

嗯,就其基本形式而言,它被认为是类型转换。您将表达式从一种类型转换为另一种类型。就是这样。

但是,具体会发生什么,这取决于类型和许多其他因素。

如果将值类型转换为其他类型,您需要依赖所涉及的两种类型之一来声明处理此问题的转换运算符。换句话说,要么值类型需要定义一个可以转换为该其他类型的转换运算符,要么该其他类型需要定义一个可以从原始类型转换的转换运算符。

该运算符的作用取决于该运算符的作者。这是一种方法,所以它可以做任何事情。

将值类型转换为其他类型会为您提供不同的值、单独的值类型或新的引用类型,其中包含转换后的新数据。

例子:

int a = (int)byteValue;

当您将值类型转换为引用类型(通常是 object)或值类型实现的接口(interface)之一时,装箱和拆箱就会发挥作用。

例子:

object o = intValue; // boxing
int i = (int)o; // unboxing

当转换到界面时,装箱也会发挥作用。假设“someValueType”是一个结构,它也实现了 IDisposable:

IDisposable disp = (IDisposable)someValueType; // boxed

转换引用类型,也可以做其他事情。

首先,您可以定义值类型中涉及的相同转换运算符,这意味着将一种引用类型转换为另一种引用类型可以返回一个全新的对象,其中包含完全不同类型的信息。

在转换引用类型时装箱不会起作用,除非您将引用类型转换回值类型(见上文。)

例子:

string s = (string)myObjectThatCanBeConvertedToAString;

或者,您可以重新解释引用,这样您仍然指的是同一对象,但您是通过一副不同类型的眼镜看它。

例子:

IDisposable disp = (IDisposable)someDisposableObject;

关于c# - 类型转换,拆箱,转换..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com