0

フォームに共有変数があります。

Public Class FormHome
      Public Shared db_config As Dictionary(Of String, String)

別のフォームからこの変数にアクセスしようとすると、

FormHome.db_config.ContainsKey("m")

私のシステム(Windows 7)では問題なく動作します。しかし、まさにその行で、Windows XP (クライアント システム) でオブジェクト参照エラー (System.NullReferenceException) が発生します。

どちらの場所でも、.NET 4.0 フレームワーク (バージョン - 4.0.30319.18034) がアプリケーションによって使用されます。奇妙に思えます。このエラーの原因は何ですか?

4

1 に答える 1

0

このコード

Public Shared db_config As Dictionary(Of String, String)

要求された型の変数( )のみを宣言します。そのタイプのオブジェクトは作成db_configされません。

オブジェクトを作成する前db_configは、まだ null であるため、アクセスしようとするとNullReferenceException.

Newオブジェクトを作成するには、キーワードを使用する必要があります。例えば:

db_config = New Dictionary(Of String, String)()

変数の値に最初にアクセスしようとする前に、このオブジェクトの作成が行われるようにする必要があります。static ( Shared) 変数を使用しているため、クラスのインスタンス コンストラクターでそれを行うのは遅すぎる可能性があります。通常のインスタンス コンストラクターは、オブジェクトのインスタンスを作成するときにのみ実行されます。

したがって、オブジェクトの静的コンストラクターで行うことをお勧めします。言語仕様で詳しく説明されているように、クラスの静的コンストラクターは、そのクラスの静的メンバーのいずれかにアクセスするまでに、ランタイムによって実行されていることが保証されています。

FormHome次のコードをクラスに追加します。

Shared Sub New()
    db_config = New Dictionary(Of String, String)()
End Sub
于 2013-04-07T11:13:10.290 に答える