【发布时间】:2017-08-11 06:30:59
【问题描述】:
我正在使用抽象工厂模式。我需要调用一个名为HelperClass 的抽象方法。
例如:我有两个抽象派生类。我创建ClassA,然后ClassA 调用TakeAction 方法。 TakeAction 方法需要创建另一个使用HelperClass 和调用class the methodSolveProblem 的方法。
这是我的问题:如何在HelperClass 中再次调用ClassA 方法?因为 SolveProblem 有一定的逻辑,会决定是否返回。
class Program {
static void Main(string[] args) {
var classA = new ClassA();
classA.StartOperation();
}
}
public abstract class ClassAbstract {
public abstract void StartOperation();
public void TakeAction() {
var helper = new HelperClass();
helper.SolveProblem(DayOfWeek.Sunday);
}
public abstract void WeekDayOperation();
public abstract void WeekEndOperation();
}
public class ClassA : ClassAbstract {
public override void StartOperation() {
TakeAction();
}
public override void WeekDayOperation() {
}
public override void WeekEndOperation() {
throw new NotImplementedException();
}
}
public class ClassB : ClassAbstract {
public override void StartOperation() {
TakeAction();
}
public override void WeekDayOperation() {
}
public override void WeekEndOperation() {
throw new NotImplementedException();
}
}
public class HelperClass {
public void SolveProblem(DayOfWeek day) {
//Problem solved. I need to call "CallThisMethod" who called this helper class
//How to I Call
switch(day) {
case DayOfWeek.Sunday:
case DayOfWeek.Saturday:
ClassA.WeekEndOperation();
break;
case DayOfWeek.Friday:
FridayOperations();
break;
default:
ClassA.WeekDayOperation();
break;
}
}
public void FridayOperations() {
}
}
【问题讨论】:
-
不确定您要解决什么问题。当您说“我怎样才能再次返回 ClassA 方法?”时,您是什么意思?
-
工厂或抽象工厂是创建模式。您的实现看起来不像。它看起来更像是一个复杂的接口。为什么需要 HelperClass?有什么具体原因吗?
-
DavidN:我的意思是,如何在任何函数中调用调用者实例方法之一? MongZhu:是的,通常在main方法中,我会创建多个派生类。所以我决定使用抽象工厂。但是如果接口是更好的解决方案,我会打开它:) 我需要 Helper 类,因为它实际上管理场景。所以我想在一个类中处理所有场景操作。实际上我的 swicth 语句有 7 个 case,其中只有 2 个需要再次调用 caller 类方法。
-
你从抽象类继承的东西已经像一个接口了。接口是一个完全抽象的类。 :) 您可以使用此继承通过多态性来解决您的问题。看看我的回答
标签: c# inheritance abstract-class abstract-factory