首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态类C#构造函数OOP

静态类C#构造函数OOP
EN

Stack Overflow用户
提问于 2012-04-01 09:28:26
回答 2查看 853关注 0票数 0

我是OOP的新手,我想我不理解静态类。

我想创建一个静态类Actions和一个用于更改文本块外观的静态方法。

下面是我的代码:

代码语言:javascript
复制
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];
    }
}

它可以工作,但我必须创建我的类的几个实例,这是无用的。

代码语言:javascript
复制
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);
}

我更喜欢这样:

代码语言:javascript
复制
private void Open_Click(object sender, RoutedEventArgs e)
{
     Actions.SetStatus(Tools.StatusOption.Online, StatusTextBlock);
}

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

代码语言:javascript
复制
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的实例。

有没有办法解决这个问题?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-01 09:34:04

您可以使用以下代码:

代码语言:javascript
复制
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]; 
    } 
} 

我还将字典设为静态的,并将枚举放在类的外部。您不应该使用类来实现这样的嵌套,如果需要的话,可以使用命名空间。

票数 5
EN

Stack Overflow用户

发布于 2012-04-01 09:30:01

StatusColors也成为静态的。在此之后,您应该阅读static关键字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9961193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档