gpt4 book ai didi

c# - 虽然不可能创建常量属性,但有没有办法在使用常量字段时避免违反 DRY 规则?

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:56 25 4
gpt4 key购买 nike

例如,我有几个常量,它们在每个派生类中具有不同的值。我想在基类的方法中使用这些值(比如在构造函数中初始化一些非静态字段)。我可以将相同的初始化代码复制粘贴到所有构造函数,但我仍然想知道是否有更好的解决方案。

我知道我不能覆盖讨论过的字段 here .如果我想访问在派生类中初始化的基类中的字段,解决方案是改用属性。但是,如果我想覆盖 static/const 字段(我相信我不能创建 static/const 属性)怎么办?

我尽量使示例尽可能简单:

class BaseClass
{
protected int currentSteps;
}

class ChildClass1 : BaseClass
{
public const int MAX_STEPS = 5;

public ChildClass1()
{
currentSteps = MAX_STEPS;
}
}

class ChildClass2 : BaseClass
{
public const int MAX_STEPS = 10;

public ChildClass2()
{
currentSteps = MAX_STEPS;
}
}

如果我可以将其重写为这样的代码以便不重复相同的代码,那将是我的理想选择,但它不会像前面提到的那样工作:

class BaseClass
{
public const int MAX_STEPS = 0;
protected int currentSteps;

public BaseClass()
{
currentSteps = MAX_STEPS;
}
}

class ChildClass1 : BaseClass
{
public const int MAX_STEPS = 5;
public ChildClass1() : base() { }
}

class ChildClass2 : BaseClass
{
public const int MAX_STEPS = 10;
public ChildClass2() : base() { }
}

是否有另一种选择可以做到这一点而不必将初始化代码复制到所有派生的构造函数? (我的真实程序我有很多派生类和很多常量)

最佳答案

向 protected 构造函数添加参数应该可以帮助您实现这一目标:

class BaseClass
{
public const int MAX_STEPS = 0;
protected int currentSteps;

public BaseClass() { currentSteps = MAX_STEPS; }
protected BaseClass(int maxSteps)
{
currentSteps = maxSteps;
}
}

class ChildClass1 : BaseClass
{
public const int MAX_STEPS = 5;
public ChildClass1() : base(MAX_STEPS) { }
}

class ChildClass2 : BaseClass
{
public const int MAX_STEPS = 10;
public ChildClass2() : base(MAX_STEPS) { }
}

可能您也不想在基类上使用默认构造函数。

关于c# - 虽然不可能创建常量属性,但有没有办法在使用常量字段时避免违反 DRY 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com