我正在阅读一本关于设计模式的书,这本书是针对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()”。任何帮助或阅读材料将不胜感激。
答案 0 :(得分:2)
明确添加protected
可解决问题(覆盖默认private
访问权限):
public abstract class Math{
protected MathStuff mathStuff;
public Math(){}
public void addStuff(){
mathStuff.add();
}
}
请注意,根据您的需要,将mathStuff
作为基类的构造函数传递或使用property而不是field将是更好的解决方案。