静态类C#构造函数OOP

bla*_*t3r 0 c# oop constructor static-class

我是OOP的新手,我想我不懂静态类.

我想创建一个静态类Actions和一个用于更改textblock外观的静态方法.

这是我的代码:

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];
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作,但我必须创建我的类的几个实例,这是恕我直言没用.

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);
}
Run Code Online (Sandbox Code Playgroud)

我希望它像这样:

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

我知道,我必须定义一个静态类和静态构造函数:

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));
    // ....
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我无法访问静态构造函数中的私有成员StatusColors,我无法创建StatusColors的实例.

任何想法如何解决?

谢谢.

aKz*_*enT 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]; 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

我也把字典静态化了,并且我把这个字体放在了课堂之外.您不应该像这样使用类进行嵌套,如果需要,请使用命名空间.