OOPS实施

时间:2015-03-07 07:31:50

标签: c# oop

我有CarsmartEngineturboEngine班级。 smartEngineturboEngine类都有start()方法。您将如何实现它,以便在将来可以根据需要进行增强。还要求编写有关代码的完整代码和问题。

2 个答案:

答案 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);
    }
}