我是OOP的新手,我想我不理解静态类。
我想创建一个静态类Actions和一个用于更改文本块外观的静态方法。
下面是我的代码:
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的实例。
有没有办法解决这个问题?
谢谢。
发布于 2012-04-01 09:34:04
您可以使用以下代码:
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];
}
} 我还将字典设为静态的,并将枚举放在类的外部。您不应该使用类来实现这样的嵌套,如果需要的话,可以使用命名空间。
发布于 2012-04-01 09:30:01
让StatusColors也成为静态的。在此之后,您应该阅读static关键字。
https://stackoverflow.com/questions/9961193
复制相似问题