C# 什么时候我真的需要使用抽象方法?
如果我在写一个画形状的程序C# 什么时候我真的需要使用抽象方法?,c#,java,class,polymorphism,abstract,C#,Java,Class,Polymorphism,Abstract,如果我在写一个画形状的程序 abstract class GraphicObject { abstract void draw(); abstract void resize(); } 然后是扩展GraphicObject的子类,称为Circle class Circle : GraphicObject { void draw() { ... } void resize() { ... } } 这样处理有意义吗?肯定会
abstract class GraphicObject {
abstract void draw();
abstract void resize();
}
然后是扩展GraphicObject的子类,称为Circle
class Circle : GraphicObject {
void draw() {
...
}
void resize() {
...
}
}
这样处理有意义吗?肯定会重复一些绘图代码吗
因此:
然后在我的圆圈课上,做所有独特的事情
public override void draw() {
//Do unique circle drawing stuff here
base.draw();
}
然后在方法末尾调用base draw方法以完成
我很难看到这样一个场景:我需要真正使用抽象方法,而不需要以某种形式重复代码 除非在draw调用的开始或结束时必须对所有形状执行某些操作,否则您不会将代码放入抽象类中来执行此操作 如果在绘制过程中有在不同点完成的常见操作,那么您可以将它们放在抽象类中,比如说,受保护的方法中;只有继承的类才能调用它们,这将把公共代码放在一个地方 抽象方法的使用是为了确保(1)使用形状的类可以访问这些方法,而不知道它引用的是哪个子类。例如,一个页面可以有一个形状列表,并对每个形状调用draw(因为它是在超类中定义的),即使每个形状都是一个特定的子类形状。如果形状中未定义draw(),则不能对列表中的每个形状调用draw
(我更熟悉java,也使用过java术语——考虑到您的继承格式和“base”的使用,我想您对其他方面更为熟悉。根据需要进行翻译…除非您在draw调用的开始或结束时必须对所有形状执行某些操作,那么你就不会把代码放在抽象类中去做了 如果在绘制过程中有在不同点完成的常见操作,那么您可以将它们放在抽象类中,比如说,受保护的方法中;只有继承的类才能调用它们,这将把公共代码放在一个地方 抽象方法的使用是为了确保(1)使用形状的类可以访问这些方法,而不知道它引用的是哪个子类。例如,一个页面可以有一个形状列表,并对每个形状调用draw(因为它是在超类中定义的),即使每个形状都是一个特定的子类形状。如果形状中未定义draw(),则不能对列表中的每个形状调用draw
(我更熟悉java,也使用过java术语——考虑到您的继承格式和“base”的使用,我想您对其他方面更熟悉。根据需要进行翻译…考虑虚拟方法返回值的情况。考虑用于创建值的工厂样式方法。
class Factory {
public abstract Node CreateNode();
}
抽象方法在这里工作得很好,因为它不会让工厂负责实际生成节点
值。相反,它只是声明应该提供一个节点。如果您将其设置为虚拟方法,则Factory
必须选择一个默认值。如果它不知道它是什么类型的工厂,它如何生成节点
public virtual Node CreateNode() {
return ???;
}
考虑虚拟方法返回值的情况。考虑用于创建值的工厂样式方法。
class Factory {
public abstract Node CreateNode();
}
抽象方法在这里工作得很好,因为它不会让工厂负责实际生成节点
值。相反,它只是声明应该提供一个节点。如果您将其设置为虚拟方法,则Factory
必须选择一个默认值。如果它不知道它是什么类型的工厂,它如何生成节点
public virtual Node CreateNode() {
return ???;
}