Force关闭子类型多态对象实例化

时间:2015-04-07 04:46:57

标签: c# unity3d polymorphism subtyping

我有以下设置:

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");
    }
}

当我运行与此类似的代码时,Unity force关闭。我知道C#支持子类型多态,所以我不确定为什么它不起作用。它没什么特别的或先进的;所以我非常困惑。无耻的承认,我在java阵营,我(un)有意识地尝试将我的java范例融入C#范例。我没有正确使用它还是我不理解C#中的子类型是如何工作的?

2 个答案:

答案 0 :(得分:0)

您的会员名称" RunMe"和你的班级#34; RunMe一样。"你会使用" RunMe"作为你的类构造函数:

public RunMe() {

就您的子类型而言,我认为您实施它的方式没有任何问题。它应该像你描述的那样工作。

答案 1 :(得分:0)

似乎正在使用

base.Value = 4

virtual类中定义为abstract的访问器会导致问题。由于我对C#的更深奥的基础不太满意,我真的不知道或理解为什么会这样。但改变代码看起来像这样:

public abstract class Parent {
    // logic for class
    public 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");
    }
}

注意我在抽象类virtual

中从我的访问者中删除了Parent关键字