private static Random Rand = new Random();
public static BaseClass CreateDerived()
return Rand.Next(1, 3) == 1 ? (BaseClass)new DerivedClass1() : new DerivedClass2();
public class DerivedClass1 : BaseClass
internal int MyProperty { get; set; }
public class DerivedClass2 : BaseClass
internal int MyProperty { get; set; }
public static void Main()
BaseClass targetClass = BaseClass.CreateDerived();
if (targetClass is DerivedClass1)
Casted = (DerivedClass1)targetClass;
else if (targetClass is DerivedClass2)
Casted = (DerivedClass2)targetClass;
Console.WriteLine(Casted.MyProperty);