public static void Main()
var dogObj = Activator.CreateInstance(Type.GetType(dog)) as Animal;
var catObj = Activator.CreateInstance(Type.GetType(cat)) as Animal;
var catSays = new object[]{"meow"};
var talkingCatObj = Activator.CreateInstance(Type.GetType(cat), catSays);
Console.WriteLine(dogObj);
Console.WriteLine(catObj);
Console.WriteLine(catObj);
public abstract class Animal
public override string ToString() { return "Type: " + GetType().Name; }
internal class Cat : Animal
public Cat(string catSay){
public class Dog : Animal