假设我有几节课:

public class ParentClass
{
    <common functionality>
    ...
}

public class ChildClass : ParentClass
{
    <additional functionality>
    ...
}


在我的代码中,我同时使用了ParentClassChildClass类型的对象-有时我不需要ChildClass上的额外功能,有时我需要。 (实际上涉及到几代的类,但让我们保持简单。)是否有一种方法可以使它,如果我这样声明一个对象:

public ParentClass thing;


我以后将无法将thing定义为:

thing = new ChildClass();


我希望多态性能够达到ChildClass继承所有ParentClass功能的程度,但是我不希望在定义对象时能够使用更具体的类。我可以以某种方式禁止这样做吗?当然,我可以使ParentClass抽象,但是那样我就不能拥有ParentClass类型的对象,有时候我确实需要它们。

最佳答案

确保这一点的唯一方法是将已定义的工厂传递给您的代码,该代码随后将创建ParentClass并不允许其他子类。

public ParentClass thing;
thing = ParentClassFactory.Build();


问题是将工厂推送到您的代码,但它可以让您控制此时设置的实例类型。

10-08 12:41