0

NullReferenceExceptionがスローされると、エラーメッセージに次のように表示されることを知っています。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

nullそして、オブジェクト参照を逆参照しようとすると、このメッセージがスローされることに気付きました。

NullReferenceExceptionこのエラー メッセージは、オブジェクト参照以外に理由がある可能性があることを意味しますnull(メモリ アドレスの誤りなど)。これは事実ですか?


編集:NullReferenceExceptionエラーメッセージの文言よりも、スローされる可能性のある理由に関心があります。エラーメッセージの文言は、まさに質問を促したものです。

4

4 に答える 4

5

言語中立になろうとしていると思われます。たとえば、Visual Basic プログラマーは、"null" ではなく "何もない" ことに慣れています。明らかに、型名は言語に中立ではありませんが、少なくともメッセージが中立である場合、それが始まりです。

どういうわけか「悪い」メモリアドレスを逆参照しようとした場合にこれが発生するかどうかはわかりません...その時点で、はるかに悪いCLRエラーが関係しています。

もう 1 つの可能性は、参照の値を明示的に null に設定したという記述を避けようとしている可能性があります。たとえば、参照型変数のデフォルト値にすぎない可能性があります。

于 2011-01-17T19:38:49.550 に答える
2

参照が null に設定されていると言っても、何をする必要があるかについては多くを語っていません。より「役立つ」ようにするために、彼らは何が起こる必要があるかを伝えています。オブジェクト参照をオブジェクトのインスタンスに設定する必要があります。

参照がnullである以外に他の理由がある可能性があることを意味するものとして、私はそれを実際には読んでいません。初期化しないままにしておくと、コンパイルエラーが発生します。肝心なのは、参照を使用しようとした時点では、参照は何も参照していないということです。

于 2011-01-17T19:41:21.023 に答える
1

オブジェクトが次のように宣言されている場合:

MyClass MyObject;

オブジェクト参照として定義されています。ただし、これは null (インスタンス化されていない) であるため、オブジェクトのインスタンスに設定されません。追加すると:

MyObject = new MyClass();

参照はオブジェクトの新しいインスタンスに設定されています。

後で null に設定すると、次のようになります。

MyObject = null;

その後、再びヌル状態になります。したがって、例外メッセージは両方のケースをカバーします (インスタンス化されていないか、明示的に null に設定されていません)。

于 2011-01-17T19:39:50.647 に答える
0

これは、共通言語仕様の一部です。静的メソッドとインスタンス メソッドの違いを見てみましょう。

静的メソッドは Type に属しているため、インスタンスは必要ありません。ILバイトコードを見ると、静的メソッドは「call」と呼ばれています。

ただし、非静的メソッドは定義上インスタンス メソッドであり、インスタンスが必要です。IL 命令は「callvirt」です。「call」と「callvirt」の主な違いは、「callvirt」はメソッドを呼び出すターゲットが null でないことを確認することです。

于 2011-01-17T20:01:50.093 に答える