从对象转换为标签

时间:2014-05-10 10:52:59

标签: c# object casting

这些代码有什么区别?

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;
        }
    }

在他们两个中都需要施放,没有错误发生。

1 个答案:

答案 0 :(得分:5)

发生编译时错误。在第二个代码块的运行时,您将获得object实际上不是Label的异常,并且不能这样做。

由于每种.NET类型都继承自object,因此您可以为object myObject;字段指定任何类型。在第一个代码块中,为其分配了Label个实例。您可以将其转发回(myObject as Label)处的标签,因为您实际上已在其中存储了Label

您的第二个代码示例存储object一个Label,因此无法投射。