Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将变量强制转换为对象会导致该变量丢失数据吗?_C#_Object_Casting - Fatal编程技术网

C# 将变量强制转换为对象会导致该变量丢失数据吗?

C# 将变量强制转换为对象会导致该变量丢失数据吗?,c#,object,casting,C#,Object,Casting,假设我有以下代码 ... PointPair newPoint = new PointPair(123, 432); newData((Object) newPoint); ... public override void newData(Object data) { PointPair newData; if (data is PointPair) newData = (PointPair)data; else newData = ne

假设我有以下代码

...
PointPair newPoint = new PointPair(123, 432);
newData((Object) newPoint);
...

public override void newData(Object data)
{
    PointPair newData;
    if (data is PointPair)
        newData = (PointPair)data;
    else
        newData = new PointPair(0, 0);

    // Do stuff with newData
}
我的
点对
对象在对
对象
进行强制/取消强制期间是否会丢失数据/信息

如果我使用
对象
对象
,这有关系吗?(大写O)

我的PointPair对象在向/从对象进行强制转换/取消强制转换期间是否会丢失数据/信息

不,不会。因为强制转换根本不会更改对象。它会更改对象的考虑方式,例如,当您将对象强制转换为
对象时,即使基础类型仍然是
点对
,您也无法访问
点对
的成员,因为您的
新点
将被视为
对象

我使用object还是object有关系吗

不,因为
object
只是
object
类的别名

我的PointPair对象在向/从对象进行强制转换/取消强制转换期间是否会丢失数据/信息

不,不会。因为强制转换根本不会更改对象。它会更改对象的考虑方式,例如,当您将对象强制转换为
对象时,即使基础类型仍然是
点对
,您也无法访问
点对
的成员,因为您的
新点
将被视为
对象

我使用object还是object有关系吗


不,因为
对象
只是
对象
类的别名。

两个问题的答案都是否定的。在强制转换时,不会丢失数据的值。对象是对象()的别名


祝你好运

你的两个问题的答案都是否定的。你在施法时不会失去数据的价值。对象是对象()的别名


祝你好运

否,没有数据丢失。但是,当您将引用类型强制转换为对象时,会影响性能。编译器必须发出一个castClass操作码,以将引用类型转换为所需的类型,这是一条要处理的附加指令。

否,因此没有数据丢失。但是,当您将引用类型强制转换为对象时,会影响性能。编译器必须发出一个castClass操作码来将引用类型转换为所需类型,这是一条要处理的附加指令

我的
PointPair
对象在强制/取消强制期间是否会丢失数据/信息 到/从对象

不可以。因为
PointPair
是引用类型(就像所有C#类一样),所以
PointPair
变量包含对实际存储在托管堆上的对象的引用。存储引用所需的空间独立于对象的类,强制转换只是告诉编译器您认为引用指向的对象类型。转换到
对象
(在您的示例代码中实际上是不必要的)表示,“将
新点
当作我只知道它是
对象
”转换成
新数据=(点对)数据
(这是必需的)告诉编译器,“让我将
数据
视为实际的
点对。”

例如,此行为与将
long
强制转换为
int
形成对比。值类型(如数值基元类型和C#结构)是按值存储的,它们占用不同的空间。因此,将
long
转换为
int
意味着潜在的数据丢失,因为64位值转换为32位值

我使用object还是object有关系吗?(大写O)

不。正如其他人所说,
object
关键字只是
object
的别名

我的
PointPair
对象在强制/取消强制期间是否会丢失数据/信息 到/从对象

不可以。因为
PointPair
是引用类型(就像所有C#类一样),所以
PointPair
变量包含对实际存储在托管堆上的对象的引用。存储引用所需的空间独立于对象的类,强制转换只是告诉编译器您认为引用指向的对象类型。转换到
对象
(在您的示例代码中实际上是不必要的)表示,“将
新点
当作我只知道它是
对象
”转换成
新数据=(点对)数据
(这是必需的)告诉编译器,“让我将
数据
视为实际的
点对。”

例如,此行为与将
long
强制转换为
int
形成对比。值类型(如数值基元类型和C#结构)是按值存储的,它们占用不同的空间。因此,将
long
转换为
int
意味着潜在的数据丢失,因为64位值转换为32位值

我使用object还是object有关系吗?(大写O)


不。正如其他人所说,
对象
关键字只是
对象
的别名。不,强制转换本身不会丢失任何数据。如果将另一个值赋给变量,则先前存储在该变量中的旧值将丢失(即,被新值覆盖)。否,强制转换本身不会丢失任何数据。如果你给一个变量分配另一个值,以前存储在该变量中的旧值就会丢失(也就是说,被新值覆盖)。啊,这就是我想要的词。“拳击”。啊,这是我想要的词。“拳击”。谢谢你的回复。不过,我确实需要这样做
newData
是一种重写方法,其中子类接受各种数据类型。因此,他们继承了
newData(objectdata)
,然后解释
objectdata
他们认为合适的方式。感谢您的回复。不过,我确实需要这样做
newData
是一种重写方法,其中子类接受各种数据类型。因此,它们继承
newData(对象数据)
,然后进行交互