说我有以下代码
...
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
}
我的PointPair
对象在投放/播放object
期间会丢失数据/信息吗?
如果我使用object
或Object
,这有关系吗? (资本O)
答案 0 :(得分:5)
我的PointPair对象在转换/转发对象期间会丢失数据/信息吗?
不,它不会。因为转换,根本不会更改您的对象。它会更改您的对象的方式,例如当您将其转换为object
时,即使基础类型仍然存在PointPair
您无法访问PointPair
的成员,因为您的newPoint
将被视为object
。
我使用object或Object是否重要?
不,因为object
只是Object
类的别名。
答案 1 :(得分:0)
你的两个问题的答案都是否定。你在投票时不会丢失数据的价值。 object是Object(http://msdn.microsoft.com/en-us/library/9kkx3h3c(v=VS.100).aspx)
的别名 祝你好运!答案 2 :(得分:0)
不,没有数据丢失。但是当您将引用类型转换为对象时,会有性能损失。编译器必须发出 castClass 操作码以将引用类型转换为所需类型,这是另一个要处理的指令。
答案 3 :(得分:0)
我的
PointPair
对象在转换/取消播放期间是否会丢失数据/信息 来自对象?
没有。因为PointPair
是引用类型(因为所有C#类都是),所以PointPair
变量保存对实际存储在托管堆上的对象的引用。存储引用所需的空间独立于对象的类,而转换只是告诉编译器您认为引用指向的对象类型。转换为object
(在您的示例代码中实际上没有必要)说,"对待newPoint
,好像我只知道它是object
。" newData = (PointPair)data;
中的强制转换( 必需)告诉编译器,"让我将data
视为它真正的PointPair
。&#34 ;
此行为与将long
转换为int
形成对比。值类型(如数字基元类型和C#结构)按值存储,它们占用不同的空间量。因此,将long
转换为int
意味着潜在的数据丢失,因为64位值将转换为32位值。
如果我使用对象或对象,这有关系吗? (资本O)
没有。正如其他人所说,object
关键字只是Object
的别名。