我有一个静态类,其中包含几个用于管理不同常量的子类。在类中,代码的某些部分经常重复。
看起来像这样:
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#继承中,这种方法不适用于静态类。还有其他聪明的方法可以实现吗?
将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。因此,您可以利用继承。