[C#替代静态类的继承

问题描述 投票:0回答:1

我有一个静态类,其中包含几个用于管理不同常量的子类。在类中,代码的某些部分经常重复。

看起来像这样:

public static class A
{
    public static class Subclass1
    {
        public const int Constant1 = 0;
        public const int Constant2 = 1;

        public static List<int> Elements 
        { get { return new List<int> { Constant1, Constant2 }} }

        public static int Property1 { get { return func1(Elements); } }
        public static int Property2 { get { return func2(Elements); } }
    }

    public static class Subclass2
    {
        public const int Constant3 = 0;
        public const int Constant4 = 1;

        public static List<int> Elements
        { get { return new List<int> { Constant3, Constant4 }} }

        public static int Property1 { get { return func1(Elements); } }
        public static int Property2 { get { return func2(Elements); } }
    }
}

以便我可以通过以下方式轻松访问它们

int a = A.Subclass1.Constant1;
List<int> b = A.Subclass1.Elements;
int c = A.Subclass1.Property1;

Property1和Property2的代码始终相同。您看到了问题:我需要在每个子类中都包含它。

我想做的是:

public abstract class Base
{
    public abstract static List<int> Elements { get; }
    public static int Property1 { get { return func1(Elements); } }
    public static int Property2 { get { return func2(Elements); } }
}

public static class B
{
    public class Subclass1 : Base
    {
        const int Constant1 = 0;
        const int Constant2 = 1;
        public override static List<int> Elements
        { get { return new List<int> { Constant1, Constant2 }} }
    }

    public static class Subclass2 : Base
    {
        const int Constant3 = 0;
        const int Constant4 = 1;
        public override static List<int> Elements
        { get { return new List<int> { Constant3, Constant4 }} }
    }
}

嗯,我知道在C#继承中,这种方法不适用于静态类。还有其他聪明的方法可以实现吗?

c# inheritance static
1个回答
0
投票

将A级内部的普通成员作为子类之外的成员。

例如:

class Program
{
    static void Main(string[] args)
    {
        A.SubA.WriteFromOutside();
        //Writes "A";
    }
}

public static class A
{
    public static string PropA = "A";
    public static class SubA
    {
        public static string PropSubA = "SubA";
        public static void WriteFromOutside()
        {
            Console.WriteLine(PropA);
        }
    }
}

但是如果您不必将类设为静态,而只需要此类的一个实例,请使用Singleton。因此,您可以利用继承。

© www.soinside.com 2019 - 2024. All rights reserved.