从对象转换为标签

moh*_*mad 0 c# casting object

这些代码有什么区别?

public class MyClass
{
    object myObject;

    public MyClass()
    {
        myObject = new Label();
        (myObject as Label).Width = 100;
    }
} 
Run Code Online (Sandbox Code Playgroud)

和:

 public class MyClass
    {
        object myObject;

        public MyClass()
        {
            myObject = new object();
            (myObject as Label).Width = 100;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在他们两个中都需要施放并且不会发生错误.

Cod*_*ter 5

没有发生编译时错误.在第二个代码块的运行时,你会得到一个异常,即一个object真的不是a Label并且不能这样生成.

因为每种.NET类型都继承自object,所以您可以为您的object myObject;字段分配任何类型.在第一个代码块中,Label为其分配了一个实例.您可以将其强制转换为标签(myObject as Label),因为您实际上已将其存储Label在其中.

您的第二代码例如存储有object,这是不一个Label,因此它不能被铸造.