// Error! This method is not deriving from Car!
return --Speed;
}
}
The problem here is that the static SlowDown() extension method is attempting to access the
Speed field of the Car type; however, because SlowDown() is a static member of the CarExtensions
class, Speed does not exist in this context! What is permissible, however, is to make use of the this-
qualified parameter to access all public members (and
only the public members) of the type being
extending. Thus, the following code compiles as expected:
public static class CarExtensions
{
public static int SlowDown(this Car c)
{
// OK!
return --c.Speed;
}
}
At this point, you could create a Car object and invoke the SpeedUp() and SlowDown() methods
as follows:
static void UseCar()
{
Car c = new Car();
Console.WriteLine("Speed: {0}", c.SpeedUp());
Console.WriteLine("Speed: {0}", c.SlowDown());
}
C H A P T E R 1 3
■
C # 2 0 0 8 L A N G U A G E F E AT U R E S
428
8849CH13.qxd 10/2/07 12:42 PM Page 428
Do'stlaringiz bilan baham: |