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

时间:2015-01-08 02:59:08

标签: java c# oop inheritance

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

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

接口:

public interface MathStuff{
    public void add();
}

摘要:

public abstract class Math{
    MathStuff mathStuff;

    public Math(){}

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

扩展类:

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

现在我真的想在C#中复制它。 C#代码基本相同。我有一个接口,一个抽象类和一个我假设正在扩展抽象类的类。我对C#并不熟悉。那堂课看起来像这样。

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

C#代码的问题在于我试着说“mathStuff = new RandomClass()”。任何帮助或阅读材料将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

public abstract class Math{
    protected MathStuff mathStuff;

    public Math(){}

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

请注意,根据您的需要,将mathStuff作为基类的构造函数传递或使用property而不是field将是更好的解决方案。