每次我想做一些类似“静态覆盖”的事情(这在 C# 中是不可能的)时,我都会发现一些问题,说这是由糟糕的设计引起的。您将如何设计代码来避免这种情况?
示例:某些游戏有很多单位,每个单位都有不同的成本(整数或类似的东西),但每个子类都有相同的成本。这里使用“抽象静态”是有意义的(恕我直言),但这是不可能的。对这种情况进行建模的最佳方法是什么?
我通常最终会创建一个抽象方法,该方法返回一个静态变量,我必须在每个子类中创建(并记住!)该静态变量,但随后我总是依赖于每个类的实例,还有其他想法吗?
最佳答案
这里根本不需要使用静态。只需为所有具体单元定义一个基类,它将成本作为初始化参数:
public abstract class UnitBase
{
public int Cost { get; private set; }
public UnitBase(int cost)
{
this.Cost = cost;
}
}
以此作为继承树的基础,然后您将遵循以下原则:
public abstract class Unit1Base : UnitBase
{
public Unit1() : base(<actual_cost>) { }
}
public class ConcreteUnit1 : Unit1Base {}
public class ConcreteUnit2 : Unit1Base {}
这样,每个混凝土单元都将具有所需的成本值......
关于c# - 如何模拟静态覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20803381/