Refresh 関数を呼び出すと、「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です....」というエラー メッセージが表示されます。
// 状態
public static string Status { get { return status; } set { status = value; Refresh(); } } private void Refresh() { lblStatus.Text = Status.ToString(); }
Refresh 関数を呼び出すと、「非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です....」というエラー メッセージが表示されます。
// 状態
public static string Status { get { return status; } set { status = value; Refresh(); } } private void Refresh() { lblStatus.Text = Status.ToString(); }
静的関数からのみ静的関数を呼び出すことができます。
次のようになるはずです
public static string Status
{
get
{
return status;
}
set
{
status = value;
Refresh();
}
}
private static void Refresh() // Change signature of function
{
lblStatus.Text = Status.ToString();
}
また
プロパティを非静的にする
public string Status // Change signature of property
{
get
{
return status;
}
set
{
status = value;
Refresh();
}
}
private void Refresh()
{
lblStatus.Text = Status.ToString();
}
Statusプロパティを非静的にするだけです。明らかに、このプロパティをそのクラスのすべてのインスタンスで共有しているわけではありません。コントロールまたはページ クラスを操作していて、他のインスタンス メソッドまたはプロパティも呼び出そうとしているようです。
これにより、コンパイルエラーが修正されます。
public string Status
....
これは悪いデザインです。ステータスからスタティックを削除する必要があります。
あなたがしようとしているのは、静的プロパティからインスタンス値を設定することです。
静的フィールド/プロパティは、静的プロパティ/メソッドからのみ変更できます。
ステータスを静的にする必要があると主張している場合は、別の静的プロパティ/フィールドを作成し、このフィールドを介して更新する必要があります。(ただし、これは非常に悪いです)。
例:ステータスがクラスForm1で定義されており、Form1インスタンスが1つだけであると仮定します。
Class Form1
{
private static Form1 staticInstance = default(Form1);
Form1()
{
staticInstance = this;
}
public static string Status
{
get
{
return status;
}
set
{
status = value;
Refresh();
}
}
private static void Refresh() // Change signature of function
{
if(staticInstance != default(Form1)
staticInstance .lblStatus.Text = Status.ToString();
}
}
これは悪い設計だと思います。lblStatus はコントロールなので、静的にすることはできないため、Refresh を静的にすることはできません。
したがって、とにかく静的コンテキストで Refresh() を呼び出すべきではありません...