How do I use composition with inheritance?

前端 未结 10 2531
星月不相逢
星月不相逢 2021-02-09 04:41

I\'m going to try to ask my question in the context of a simple example...

Let\'s say I have an abstract base class Car. Car has-a basic Engine object. I have a method

10条回答
  •  天命终不由人
    2021-02-09 05:10

    I think this would work.

    public class Car
    {
        private Engine engine;
        public virtual Engine CarEngine
        {
            get { return engine;}
        }
    
        public StartEngine()
        {
             CarEngine.Start();
        }
    }
    
    public class Engine
    {
         public virtual void Start()
         {
             Console.Writeline("Vroom");
         }
    } 
    
    public class TurboEngine : Engine
    {
        public override void Start()
        {
            Console.Writeline("Vroom pSHHHHHHH");
        }    
    
        // TurboEngine Only method
        public double BoostPressure()
        {
        }
    }
    
    public class Ferrari : Car
    {
        private TurboEngine engine;
        public override Engine CarEngine
        {
             return engine;
        }
    }
    
    Ferrari = car new Ferrari();
    // Will call Start on TurboEngine()
    car.StartEngine();
    // Upcast to get TurboEngine stuff
    Console.WriteLine(car.CarEngine as TurboEngine).BoostPressure();
    

提交回复
热议问题