0

您好,我无法理解为什么这段代码:

using System;

class Person
{
    public Person()
    {
    }
}


class NameApp
{
    public static void Main()
    {
        Person me = new Person();
        Object you = new Object();

        me = you as Person;
        //me = (Person) you;

        System.Console.WriteLine("Type: {0}", me.GetType()); //This line throws exception
    }
}

抛出此异常:

未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。在 C:\Users\Nenad\documents\visual studio 2010\Projects\Exercise 11.3\Exercise 11.3\Program.cs:line 21 中的 NameApp.Main()

4

8 回答 8

2

你的线

me = you as Person;

失败并将 null 分配给,me因为您无法将基类类型对象强制转换为子类。

作为(C# 参考)

as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而不是引发异常

您可能想要转换personobject, 因为me是一个Object, 但you不是一个人。

于 2013-03-05T07:36:25.633 回答
2

此代码将始终设置me为 null

   Object you = new Object();
   me = you as Person;

因为Obejct不是人_

但人是object

object you = new Person();
me = you as Person;
于 2013-03-05T07:36:31.847 回答
1
Object you = new Object();
me = you as Person;

you是一个对象,而不是一个人,所以you as Person只会返回 null。

于 2013-03-05T07:36:41.703 回答
1
me = you as Person;

menullifyou不能被强制转换为Person(这就是在你的情况下发生的事情,因为new Object()不能被强制转换为Person.

于 2013-03-05T07:36:55.837 回答
1

如果对象不是您请求的类型, as 运算符将返回 null。

me = you as Person;

你是一个对象,而不是一个人,所以(你作为人)是空的,因此我是空的。当你之后对我调用 GetType() 时,你会得到一个 NullReferenceException。

于 2013-03-05T07:37:28.053 回答
1
public static void Main()
{
    Person me = new Person();
    Object you = new Object();

    // you as person = null
    me = you as Person;
    //me = (Person) you;

    System.Console.WriteLine("Type: {0}", me.GetType()); //This line throws exception
}
于 2013-03-05T07:37:56.607 回答
1

对象不能转换为 Person。它是面向对象编程的原则。

Object 是 Person 的父类。每个类都继承它,

您可以将 Person 转换为 Object,但不能将 Object 转换为 Person

于 2013-03-05T07:38:22.647 回答
1

如果您使用as关键字进行强制转换并且无法进行强制转换,则它会返回null. 然后在你的情况下,你现在打电话,me.GetType()所以抛出异常。menull

如果你像施法一样施法(Person) objectOfTypeThatDoesNotExtendPerson,施法时会立即抛出异常。

于 2013-03-05T07:43:55.377 回答