这些代码有什么区别?
public class MyClass
{
object myObject;
public MyClass()
{
myObject = new Label();
(myObject as Label).Width = 100;
}
}
和
public class MyClass
{
object myObject;
public MyClass()
{
myObject = new object();
(myObject as Label).Width = 100;
}
}
在他们两个中都需要施放,没有错误发生。
答案 0 :(得分:5)
发生编译时错误。在第二个代码块的运行时,您将获得object
实际上不是Label
的异常,并且不能这样做。
由于每种.NET类型都继承自object
,因此您可以为object myObject;
字段指定任何类型。在第一个代码块中,为其分配了Label
个实例。您可以将其转发回(myObject as Label)
处的标签,因为您实际上已在其中存储了Label
。
您的第二个代码示例存储object
,不一个Label
,因此无法投射。