Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
静态类C#构造函数OOP_C#_Oop_Constructor_Static Class - Fatal编程技术网

静态类C#构造函数OOP

静态类C#构造函数OOP,c#,oop,constructor,static-class,C#,Oop,Constructor,Static Class,我是OOP新手,我想我不理解静态类 我想创建一个静态类动作和一个用于更改textblock外观的静态方法 这是我的密码: public static class Tools { public enum StatusOption { Online, Offline, Warning } } public class Actions { private SortedDictionary<Tools.StatusO

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

我想创建一个静态类动作和一个用于更改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];
    }
}
我更喜欢这样:

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));
    // ....
  }
}
公共静态类操作
{
private SortedDictionary Status Colors=新的SortedDictionary();
静态动作()
{
添加(Tools.StatusOption.Online,新的SolidColorBrush(Colors.Green));
// ....
}
}
问题是,我无法在静态构造函数中访问私有成员StatusColors,也无法创建StatusColors的实例

有什么办法解决吗


谢谢

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

Make
StatusColors
static。之后,您应该仔细阅读关键字。

您可以使用以下代码:

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]; 
    } 
} 
公共枚举状态选项
{ 
在线 的
离线,
警告
} 
公共集体诉讼
{ 
私有静态SortedDictionary StatusColors=新的SortedDictionary();
静态动作()
{ 
添加(Tools.StatusOption.Online,新的SolidColorBrush(Colors.Green));
添加(Tools.StatusOption.Offline,新的SolidColorBrush(Colors.Red));
添加(Tools.StatusOption.Warning,新的SolidColorBrush(Colors.Orange));
} 
公共静态无效设置状态(Tools.StatusOption\u StatusOption,TextBlock\u txtBlock)
{ 
_txtBlock.Text=_statusOption.ToString();
_txtBlock.Foreground=StatusColors[_statusOption];
} 
} 
我还将字典设置为静态,并将枚举放在类外。您不应该像这样使用类进行嵌套,如果需要,请使用命名空间。

您可以使用以下代码:

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]; 
    } 
} 
公共枚举状态选项
{ 
在线 的
离线,
警告
} 
公共集体诉讼
{ 
私有静态SortedDictionary StatusColors=新的SortedDictionary();
静态动作()
{ 
添加(Tools.StatusOption.Online,新的SolidColorBrush(Colors.Green));
添加(Tools.StatusOption.Offline,新的SolidColorBrush(Colors.Red));
添加(Tools.StatusOption.Warning,新的SolidColorBrush(Colors.Orange));
} 
公共静态无效设置状态(Tools.StatusOption\u StatusOption,TextBlock\u txtBlock)
{ 
_txtBlock.Text=_statusOption.ToString();
_txtBlock.Foreground=StatusColors[_statusOption];
} 
} 

我还将字典设置为静态,并将枚举放在类外。您不应该像这样使用类进行嵌套,如果需要,可以使用名称空间。

它可以完全解决问题。如果要在任何静态成员中使用非静态成员,则应声明变量this。否则,您可以将成员更改为静态成员。如果你的类是静态的,你最好把所有的成员都放到静态中,这样可以完全解决这个问题。如果要在任何静态成员中使用非静态成员,则应声明变量this。否则,您可以将成员更改为静态成员。如果你的类是静态的,你最好把所有的成员都放到静态中。