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(对象数据)
,然后进行交互