我有Car
,smartEngine
和turboEngine
班级。 smartEngine
和turboEngine
类都有start()
方法。您将如何实现它,以便在将来可以根据需要进行增强。还要求编写有关代码的完整代码和问题。
答案 0 :(得分:1)
我将创建IEngine
界面:
interface IEngine
{
void Start();
}
这两个类必须从这个接口继承,然后你可以为这两个类实现Start
方法:
public class SmartEngine : IEngine
{
...
public void Start() { Console.WriteLine("SmartEngine"); }
...
}
public class TurboEngine : IEngine
{
...
public void Start() { Console.WriteLine("TurboEngine"); }
...
}
顺便说一下,我不知道你是如何实施Car
课程的,但有两个选项取决于汽车可以携带多少引擎。如果它可以携带其中一个,那么您只需要一个IEngine
类型的属性。但是,如果它可以携带多个,那么你需要在Car
类中声明它们:
public IEngine engine; // Car has an Engine
或
public SmartEngine smartEngine;
public TurboEngine turboEngine;
作为旁注,遵循naming conventions非常重要。始终使用 PascalCasing 作为类名和方法名。
答案 1 :(得分:0)
您可以创建可以在Car类中使用的接口IEngine (或其他地方,其中引擎实现的细节没有意义)。
您还可以创建抽象BaseEngine类(当然,它实现了IEngine)。此基类封装了通用引擎逻辑并消除了代码重复。许多不同的引擎(如 SmartEngine 和 TurboEngine )可以使用BaseEngine作为基类共享相同的功能。 如果某些引擎的行为完全不同,那么只需使用iterface并实现全新的引擎类。
/// <summary>
/// Represents car engine.
/// </summary>
public interface IEngine
{
void Start();
}
/// <summary>
/// Implement base behavior for different engine implementations.
/// For example: Model property can be common for all your engines.
/// </summary>
public abstract class BaseEngine : IEngine
{
protected BaseEngine(string model)
{
if (model == null)
throw new ArgumentNullException();
Model = model;
}
public abstract void Start();
public string Model { get; private set; }
}
/// <summary>
/// Implement smart engine.
/// </summary>
public class SmartEngine : BaseEngine
{
public SmartEngine(string model) : base(model) { }
public override void Start()
{
Console.WriteLine("SmartEngine {0} started.", Model);
}
}
/// <summary>
/// Implement turbo engine.
/// </summary>
public class TurboEngine : BaseEngine
{
public TurboEngine(string model) : base(model) { }
public override void Start()
{
Console.WriteLine("TurboEngine {0} started.", Model);
}
}