C# Question

Is it possible to create a derived class from a base class constructor?

I have say 3 classes, Animal, Cat & Dog.

// calling code
var x = new Animal("Rex"); // would like this to return a dog type
var x = new Animal("Mittens"); // would like this to return a cat type

if(x.GetType() == typeof(Dog))
{
x.Bark();
}
else
{
x.Meow();
}


class Animal
{
public Animal(string name)
{
// check against some list of dog names ... find rex
// return Animal of type Dog.

// if not...

// check against some list of cat names ... find mittens
// return Animal of type Cat.
}
}


Is this possible somehow? If not is there something similar I can do?

Answer

What you are looking for is either a 'virtual constructor' (not possibe in C#) or the Factory pattern.

class Animal
{
   // Factory method
   public static Animal Create(string name)
   {
      Animal animal = null;
      ...  // some logic based on 'name'
          animal = new Zebra();

      return animal;
   }
}

The Factory method can also be placed in another (Factory) class. That gives better decoupling etc.

Comments