静态类可以具有静态类类型的属性吗?

时间:2019-02-05 10:24:28

标签: c# static

我正在尝试将应用程序设置分组,以提高清晰度。为此,创建了一个静态AppSettings.cs类,该类应包含应用程序各部分的不同设置组:

AppSettings
  |--AppSettingsGroupA
  |--AppSettingsGroupB
  |--AppSettingsGroupC

代码如下:

public class AppSettings
{
    public static AppSettingsGroupA GroupASettings{ get; set; }
    public static AppSettingsGroupB GroupBSettings{ get; set; }
}

public static class AppSettingsGroupA 
{
    public static IPAddress IpAddress
    {
        get{return IPAddress.Parse("192.168.0.1"]);}
    }
}

public static class AppSettingsGroupB 
{
    public static IPAddress IpAddress
    {
        get{return IPAddress.Parse("192.200.2.100"]);}
    }
}

问题是我收到一条错误消息,说静态类型不能用作返回类型。

这可以解决吗,还是我需要使用其他技术才能在不同的组中调用我的设置,例如:AppSettings.AppSettingsGroupA.IpAddress或AppSettings.AppSettingsGroupB.IpAddress

感谢您的帮助,

2 个答案:

答案 0 :(得分:1)

“不”,基本上-您不能那样做。如果只希望它们分层,则可以{strong>嵌套 AppSettings中的静态类型,但是IMO更为常见的是,它们不是静态的

嵌套静态版本:

public static class AppSettings
{
    public static class GroupASettings
    {
        public static IPAddress IpAddress { ... }

    public static class GroupBSettings
    {
        public static IPAddress IpAddress { ... }
    }
}

答案 1 :(得分:0)

您要在此处存档的文件有点尴尬,我不认为为什么AppSettingsGroupAAppSettingsGroupB都必须static才是真正的需要。只需将staticAppSettingsGroupA中的AppSettingsGroupB删除即可完成要存档的工作。这样,您仍可以在static中拥有AppSettings属性。

public static void Main(String[] args)
{
    AppSettings.GroupASettings = new AppSettingsGroupA();
    AppSettings.GroupBSettings = new AppSettingsGroupB();

    Console.WriteLine(AppSettings.GroupASettings.IpAddress);
    Console.WriteLine(AppSettings.GroupBSettings.IpAddress);
}

public class AppSettingsGroupA 
{
    public IPAddress IpAddress => IPAddress.Parse("192.168.0.1");
}

public class AppSettingsGroupB 
{
    public IPAddress IpAddress => IPAddress.Parse("192.200.2.100");
}

n.b。已使用c#6.0属性语法