No, if you create a new instance of class A, then you can't cast it to a derived type: that doesn't work. All you can do is cast a derived type to a type lower in teh inheritance chain, such as it's base type:
public class A { }
public class AA : A { }
public class AB : A { }
public class AAA : AA { }
public class ABA : AB { }
You can cast an instance of AA or AB to A, or you can cast an instance of AAA to A or AA, and an instance of ABA to A or AB, but you can't cast an instance of A to any of the others, or of AAA to AB!
If you want to call the Run method for a derived class, then you need to create an instance of the derived class explicitly, not create an instance of the base class and try to "magically get" an instance of the derived class from that.