Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In C#, can I know in the base class what children inherited from me?

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.

Example:

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

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

Omri

like image 941
Omri Avatar asked Nov 19 '08 15:11

Omri


2 Answers

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
    }
}
like image 63
Jon Skeet Avatar answered Oct 04 '22 06:10

Jon Skeet


this.GetType() will give you the type of the current instance

like image 25
Joe Avatar answered Oct 04 '22 04:10

Joe