<p>I have a base class vehicle and some children classes like car, motorbike etc.. inheriting from vehicle.
In each children class there is a function Go();
now I want to log information on every vehicle when the function Go() fires, and on that log I want to know which kind of vehicle did it.</p>

<p>Example:</p>

<pre><code>public class vehicle 
{
      public void Go()
      {
           Log("vehicle X fired");
      }
}
public class car : vehicle
{
       public void Go() : base()
       {
           // do something
       }
}
</code></pre>

<hr>

<p>How can I know in the function Log that car called me during the base()?
Thanks,</p>

<p>Omri</p>

Calling
```
GetType()
```
from Vehicle.Go() would work - but only if Go() was actually called.
One way of enforcing this is to use the
template method pattern
:
```
```
public abstract class Vehicle 
{
    public void Go()
    {
        Log("vehicle {0} fired", GetType().Name);
        GoImpl();
    }

    protected abstract void GoImpl();
}

public class Car : Vehicle
{
    protected override void GoImpl()
    {
        // do something
    }
}
```
```