title: Abstract extension method inheritance from abstract class
body: <p>I'm trying to achieve the following, not sure yet that it is at all possible:
  (Behind the scene is a CarFactory I tried to do - implementing the Factory design pattern)</p>
  
  <p>I have a abstract class "Car" with solid properties that are shared between all cars and I have features like "RadioDisc", "FuelInjection" which not all cars have.</p>
  
  <p>There could be several types of "RadioDisc" or "FuelInjection".</p>
  
  <p>Each of these features follows a certain pattern, has shared properties but the installation process on a car is different.</p>
  
  <p>I want each feature to make changes to Car based on a method that can do some stuff.</p>
  
  <p>The extension should look something like this:</p>
  
  <pre><code>Car myCar = new Car();  //Car is a class which has solid props &amp; List of Feature class
  FuelInjection V1 = new FuelInjection(); 
  myCar.Install&lt;FuelInjection&gt;(V1) ; 
  </code></pre>
  
  <p>Ideally it should do like this, but I have compiler error-</p>
  
  <blockquote>
    <p>Extension method must be defined in a non-generic static class</p>
  </blockquote>
  
  <p>Of course I don't want a general static method, I want a method that will have same signature but will do something diffrent to the car on each class that inherit Feature.</p>
  
  <p>Example for feature is FuelInjection that add Cost to the car, and let's say improve FuelConsumption property on Car.</p>
  
  <p>Abstract Feature class:</p>
  
  <pre><code>public abstract class Feature
  {
      internal float _cost;
  
      public float Cost
      {
          get
          {
              return _cost;
          }
      }
  
      public abstract void Install&lt;T&gt;(this Car car) where T : Feature;
  }
  </code></pre>
  
  <p>Specific feature:</p>
  
  <pre><code>  public class FuelInjection : Feature
      {
          public new void Install&lt;T&gt;(this Car car) where T : Feature
          {
              //In iDo some stuff to Car:
              car.price += this._cost; //this suppose to be the Feature instance. 
                                       //I want to add the cost to property "Price" in Car.
          }
  }
  </code></pre>
  
  <p>Is that even possible in c#?
  Is there a different direction to go maybe?</p>