【发布时间】:2018-04-01 13:04:16
【问题描述】:
我在 C# 中的聚合有一些问题。现在,我有以下代码:
namespace ShapeDrawing
{
public abstract class Shape
{
protected Drawing myDrawing;
public Shape(Drawing drawing)
{
myDrawing = drawing;
}
}
public abstract class Drawing
{
public abstract void drawLine();
public abstract void drawCircle();
}
}
唯一的问题是,当需要实例化这些类之一时,Shape 的子类现在将绘图作为参数。唯一的问题是,绘图不能作为这些类的参数(由于程序的某些原因)。
有没有办法在不使用绘图作为Shape子类的参数的情况下进行聚合?
[更新为第一个答案]
我这样做了,但后来我遇到了以下问题。在我的 Shape 子类之一中,我有以下方法:
public override void draw()
{
myDrawing.drawCircle(x, y, size);
}
运行此方法时,myDrawing 出现问题。我得到的错误是:
“NullReferenceException 未处理。ShapeDrawing.exe 中发生了“System.NullReferenceException”类型的未处理异常”
我该如何解决这个问题?
问候, 乔伦
【问题讨论】:
-
为抽象类创建构造函数的唯一原因是让派生类有一个共同的构造函数逻辑(代码),所以如果你不想让派生类这样做,那么就没有类将调用它,
myDrawing将永远不会被初始化。 -
现在我遇到了myDrawing等于null的问题,因为在任何构造方法中都没有提到它。此外,myDrawing 永远无法初始化,因为 Drawing 是一个抽象类。
标签: c# aggregation