I have the following setup:

```
public abstract class Parent {
    // logic for class
    public virtual int Value {get;set;}
    public Parent(){}
}

public class Child1 : Parent {
    // child specific logic here
    public Child1 () : base() {
        base.Value = 4;
    }
}

public class Child2 : Parent {
    // child specific logic here
    public Child2 () : base() {
        base.Value = 6;
    }
}

public class RunMe {
    Parent p;

    public Parent instantiateObject(string s) {
        switch(s) {
            case "child1":
                return new Child1();
            break;
            default:
            case "child2":
                return new Child2();
            break;
        }
    }

    public RunMe() {
        p = instantiateObject("child1");
    }
}

```

when I run code similar to this, Unity force closes. I know C# supports subtype polymorphism, so I'm not really sure why this isn't working. It is nothing special or advanced; so I'm super confused. Shameless admission, I'm in the java camp, and I do (un)consciously try to fit my java paradigm into the C# paradigm. Am I not using it correctly or am I not understanding how sub-typing works in C#?