OOPS implementation
本文关键字:implementation OOPS | 更新日期: 2024-10-22 01:07:07
我有Car
、smartEngine
和turboEngine
类。smartEngine
和turboEngine
类都有start()
方法。你将如何实施它,以便在未来需要时可以增强它。还被要求编写完整的代码和有关代码的问题。
我将创建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;
顺便说一句,遵循命名约定是很重要的。对于类名和方法名,请始终使用PascalCassing。
您可以创建接口IEngine,该接口可以在Car类中使用(或在其他地方,引擎实现的细节没有意义)。
您还可以创建抽象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);
}
}