私はグローバル変数についていくつかの調査を行い、静的変数が私の問題を解決できるはずであるという事実にたどり着きました。しかし、これらの作り方がわかりません。どうすればいいですか?また、静的変数で問題が解決しない場合は、何を使用すればよいですか?
別のフォームから、メイン フォームの文字列、bool、および int にアクセスできるようにしたいと考えています。ヘルプ?
静的変数 (さらに良いことに、プロパティ) が機能する可能性があります。これを次のように宣言します。
// In Form1 (could be internal or public)
public static bool SomeBool { get; set; }
そして、アクセスするには、Form1.SomeBool = true;
orif (Form1.SomeBool) {
などを使用します。
そうは言っても、このような「グローバル」データは、ある理由でお勧めできません。通常、これを処理するためのより良い方法があります。たとえば、データを保持するカスタム クラスを作成し、作成時にこのクラスのインスタンスへの参照を新しいフォームに渡すことができます。
静的であるだけでなく、 である必要がありますpublic static
。のように、他の変数と同じように簡単に宣言できますpublic static int x = 1;
。その後、 のようClassFoo.x
にアクセスできますが、静的コンテキストにもいる必要があります。
この情報をフォーム インスタンス (オブジェクト) ごとに保持したい場合は、静的フィールドを使用したくありません。一方、クラス フォームの任意のインスタンス (共有されている) からアクセスできる情報が必要な場合、つまり、この情報を一度だけ取得したい場合は、はい、使用します静的フィールド。
あなたがしたいことは次のようなものです:
//partial because I take you are using a form designer.
//and also because the class is gonna have more things than those showed here.
//in particular the example call a method "UseFields" that I did not define.
public partial class MyForm: form
{
private static bool boolField;
private static string stringField;
private static int intField;
private void Method()
{
//Do something with the fields
UseFields(boolField, stringField, intField);
UseFields(IsBoolFieldSet, SomeString, SharedInformation.SomeInt);
}
//You can also wrap them in a property:
public static bool IsBoolFieldSet
{
get
{
return boolField;
}
//Don't put a set if you want it to be read only
set
{
return boolField;
}
}
//Or declare an static property like so:
public static string SomeString { get; set; }
}
//Another good option is to have this information in a separate class
public class SharedInformation
{
public static int SomeInt { get; set; }
}
特にマルチスレッド環境では、共有状態に注意してください。この情報は、アクセス権を持つ別のオブジェクトによって通知なしに変更される可能性があるためです。