2012-04-01 247 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關鍵字。