2012-04-01 155 views
0

我是OOP的新手,我想我不懂静态类。静态类C#构造函数OOP

我想创建一个静态类行动和改变文本块外观一个静态方法..

这里是我的代码:

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

它可以完全解决问题。如果你想在任何静态成员中使用非静态成员,你应该声明一个变量'this'。否则,您可以将该成员更改为静态成员。如果你的类是静态的,你最好把所有的成员变成静态的。 – 2012-04-01 01:46:42

0

使StatusColors也是静态的。之后,您应该阅读static关键字。