C# 抽象类使用哪个具体类?设计问题?
我有一个设计问题。我正在修改现有代码和实例化新类的地方。由于将类转换为我能理解的抽象类,它给了我错误。它抛出了一个错误,因为您无法创建抽象类的实例 我有下面的代码C# 抽象类使用哪个具体类?设计问题?,c#,oop,design-patterns,architecture,abstract-class,C#,Oop,Design Patterns,Architecture,Abstract Class,我有一个设计问题。我正在修改现有代码和实例化新类的地方。由于将类转换为我能理解的抽象类,它给了我错误。它抛出了一个错误,因为您无法创建抽象类的实例 我有下面的代码 ExampleProcessor pro = new ExampleProcessor(); 但是ExmapleProcessor类现在变成了抽象类 public abstract class ExmapleProcessor { public abstract void Method1(); public abstract
ExampleProcessor pro = new ExampleProcessor();
但是ExmapleProcessor类现在变成了抽象类
public abstract class ExmapleProcessor {
public abstract void Method1();
public abstract void Method2();
}
子类AExampleProcessor和BExampleProcessor
public class AExampleProcessor : ExampleProcessor
{
public override void Method1() { //do something }
public override void Method2() { //do something }
}
public class BExampleProcessor : ExampleProcessor
{
public override void Method1() { //do something }
public override void Method2() { //do something }
}
因此,这一行在我的应用程序中到处都会导致42个错误“ExampleProcessor pro=new ExampleProcessor();”
我不想这样做
AExampleProcessor pro = new AExampleProcessor();
及
因为我想让我的应用程序决定使用哪个类。如何使它加载正确的类
我想要一些代码示例。由于您希望应用程序决定使用哪个具体的子类,我建议您使用工厂模式。
这样,客户机代码只知道您正在使用ExampleProcessor,而实现细节将保持隐藏状态。创建工厂:
public static class ExampleProcessorFactory
{
public static ExampleProcessor Create()
{
if(IsFullmoon)
return new ExampleProcessorA();
else
return new ExampleProcessorB();
}
}
然后将对
newexampleprocessor()
的所有调用替换为对ExampleProcessorFactory.Create()
的调用。现在,您已经将实例化逻辑和选择要实例化的具体类封装到一个位置,在这里您可以应用任何逻辑来决定要实例化的类。(决定何时使用哪个类可能会从某些改进中受益的逻辑与满月无关。)就我刚才写的,lol.MSDN Reference-@RichardD:那篇文章提到了该模式的一个更高级的变体,而我的代码只是一个例子。我在哪里填充了“IsFullMoon”IsFullMoon
的意思是一个笑话,用来说明在决定使用哪个类时应该将逻辑放在哪里。在现实生活中,它可能是对配置文件值、http请求属性或其他内容的检查。
public static class ExampleProcessorFactory
{
public static ExampleProcessor Create()
{
if(IsFullmoon)
return new ExampleProcessorA();
else
return new ExampleProcessorB();
}
}