我目前正在阅读一本关于设计模式的书,该书是针对 Java 编写的,但想用 Java 和 C# 编写示例代码。现在我正在尝试在 C# 中实现策略模式,虽然我在网上找到了很多示例,但我当前的问题是我最想弄清楚的。
在 Java 示例中,我有一个抽象类,然后是一个扩展该抽象类的类。在抽象类中,我声明但不实例化接口(interface)的变量,然后在扩展类中实例化这些变量。
界面:
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# 代码本质上是相同的。我有一个接口(interface)、一个抽象类和一个我认为扩展抽象类的类。我对 C# 不太熟悉。那个类看起来像这样。
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
作为基类的构造函数传递或使用属性而不是字段将是更好的解决方案。
关于java - 从继承类引用抽象类中声明的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832229/