c# - 如何模拟静态覆盖?

标签 c# static overriding

每次我想做一些类似“静态覆盖”的事情(这在 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/

相关文章:

c# - c#中的等效代码是什么

javascript - 从未指定的 anchor 标记获取 HREF

java - 在 main() 方法中访问实例变量?

html - 你如何通过覆盖它从 Bootstrap 中完全删除样式

scala - 当未明确给出返回类型时,为什么可以用返回 String 的方法覆盖返回 Unit 的方法?

c# - 无法将 content1.png Assets 加载为非内容文件

java - 静态和非静态变量的数学运算

c++ - 静态字符串文字表?

function - Lua 全局覆盖

c# - 比较和对比 C++ 与 C# 命名空间层次结构