2012-04-01 12 views
0

私はOOPを初めて使用しています。静的クラスはわかりません。スタティッククラスC#コンストラクタOOP

私はここで

が私のコード..です静的クラスアクションを作成し、テキストブロックのapperanceを変更するための1つの静的メソッドにしたい:

public static class Tools 
{ 
    public enum StatusOption 
    { 
     Online, 
     Offline, 
     Warning 
    } 
} 

public class Actions 
{ 
    private SortedDictionary<Tools.StatusOption,SolidColorBrush> StatusColors = new SortedDictionary<Tools.StatusOption,SolidColorBrush>(); 

    public Actions() 
    { 
     StatusColors.Add(Tools.StatusOption.Online, new SolidColorBrush(Colors.Green)); 
     StatusColors.Add(Tools.StatusOption.Offline, new SolidColorBrush(Colors.Red)); 
     StatusColors.Add(Tools.StatusOption.Warning, new SolidColorBrush(Colors.Orange)); 
    } 

    public void SetStatus(Tools.StatusOption _statusOption, TextBlock _txtBlock) 
    { 
     _txtBlock.Text = _statusOption.ToString(); 
     _txtBlock.Foreground = StatusColors[_statusOption]; 
    } 
} 

それは動作しますが、私は私の複数のインスタンスを作成する必要がありますクラス、これは無用です。

private void Close_Click(object sender, RoutedEventArgs e) 
{ 
    Actions a1 = new Actions(); 
    a1.SetStatus(Tools.StatusOption.Offline, StatusTextBlock); 
} 

private void Open_Click(object sender, RoutedEventArgs e) 
{ 
    Actions a2 = new Actions(); 
    a2.SetStatus(Tools.StatusOption.Online, StatusTextBlock); 
} 

私はちょうどこのようにそれを好む:

private void Open_Click(object sender, RoutedEventArgs e) 
{ 
    Actions.SetStatus(Tools.StatusOption.Online, StatusTextBlock); 
} 

私が知っている、私は静的クラスと静的コンストラクタを定義する必要があります。

public static class Actions 
{ 
    private SortedDictionary<Tools.StatusOption,SolidColorBrush> StatusColors = new SortedDictionary<Tools.StatusOption,SolidColorBrush>(); 

    static Actions() 
    { 
    StatusColors.Add(Tools.StatusOption.Online, new SolidColorBrush(Colors.Green)); 
    // .... 
    } 
} 

問題は、私がすることはできません静的コンストラクターでプライベートメンバーStatusColorsにアクセスすると、StatusColorsのインスタンスを作成できません。

どのように解決するか?

ありがとうございました。

答えて

5

あなたはこのコードを使用することができます:

public enum StatusOption 
{ 
    Online, 
    Offline, 
    Warning 
} 

public class Actions 
{ 
    private static SortedDictionary<Tools.StatusOption,SolidColorBrush> StatusColors = new SortedDictionary<Tools.StatusOption,SolidColorBrush>(); 

    static Actions() 
    { 
     StatusColors.Add(Tools.StatusOption.Online, new SolidColorBrush(Colors.Green)); 
     StatusColors.Add(Tools.StatusOption.Offline, new SolidColorBrush(Colors.Red)); 
     StatusColors.Add(Tools.StatusOption.Warning, new SolidColorBrush(Colors.Orange)); 
    } 

    public static void SetStatus(Tools.StatusOption _statusOption, TextBlock _txtBlock) 
    { 
     _txtBlock.Text = _statusOption.ToString(); 
     _txtBlock.Foreground = StatusColors[_statusOption]; 
    } 
} 

私も辞書静的を作っても、私はクラスの外に列挙型を置きます。このような入れ子にはクラスを使用しないでください。必要に応じて名前空間を使用してください。

+0

これは完全に問題を解決することができます。 staticメンバでunstaticメンバを使いたい場合は、 'this'の変数を宣言する必要があります。それ以外の場合は、メンバーを静的メンバーに変更できます。あなたのクラスが静的な場合は、すべてのメンバーを静的にする方がよいでしょう。 –

0

StatusColorsも静的にしてください。その後、staticキーワードを読んでください。