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;

me基本クラス型オブジェクトを子クラスにキャストできないため、失敗してnullを割り当てています。

as (C# リファレンス)

as 演算子はキャスト操作に似ています。ただし、変換が不可能な場合、 as は例外を発生させる代わりに null を返します

は ですが、人ではないため、おそらくpersonとしてキャストする必要があります。objectmeObjectyou

于 2013-03-05T07:36:25.633 に答える
2

このコードは常にmenull として設定されます

   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はオブジェクトであり、Personではないため、you as Person単にnullを返します。

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

meにキャストできないnull場合です(にキャストできないため、これがあなたの状況で起こっていることです。youPersonnew Object()Person

于 2013-03-05T07:36:55.837 に答える
1

オブジェクトが要求したタイプでない場合、as演算子はnullを返します。

me = you as Person;

あなたは人ではなくオブジェクトなので、(人としてのあなたは)nullであり、したがって私はnullです。後で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 に答える