从继承 class 引用抽象 class 中声明的变量

Referencing a variable declared in abstract class from inherited class

我目前正在阅读一本针对 java 编写的关于设计模式的书,但我想用 Java 和 C# 编写示例代码。现在我正在尝试在 C# 中实现策略模式,虽然我在网上找到了很多示例,但我目前的问题是我最想弄清楚的。

在 Java 示例中,我有一个抽象 class,然后是扩展该抽象 class 的 class。在抽象 class 中,我声明但不实例化接口的变量,然后在扩展 class.

中实例化这些变量

接口:

public interface MathStuff{
    public void add();
}

摘要:

public abstract class Math{
    MathStuff mathStuff;

    public Math(){}

    public void addStuff(){
        mathStuff.add();
    }
}

扩展Class:

public class DoStuffWithMath extends Math{
    public DoStuffWithMath(){
        mathStuff = new RandomClass();
    }
}

现在我真的很想在 C# 中复制它。 C# 代码本质上是相同的。我有一个接口、一个抽象 class 和一个 class,我假设它扩展了抽象 class。我对 C# 不太熟悉。 class 看起来像这样。

class DoStuffWithMath : Math{
    public DoStuffWithMath(){
        mathStuff = new RandomClass();
    }
}

C# 代码的问题是我试图说的 "mathStuff = new RandomClass()"。任何帮助或阅读 material 将不胜感激。

明确添加 protected 将解决问题(覆盖默认 private 访问权限):

public abstract class Math{
    protected MathStuff mathStuff;

    public Math(){}

    public void addStuff(){
        mathStuff.add();
    }
}

请注意,根据您的需要,传递 mathStuff 作为基础 class 的构造函数或使用 属性 而不是字段将是更好的解决方案。