【问题标题】:Force exact class on definition强制定义精确类
【发布时间】:2014-09-22 15:29:56
【问题描述】:

假设我有几个课程:

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

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

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

public ParentClass thing;

将无法稍后将thing 定义为:

thing = new ChildClass();

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

【问题讨论】:

    标签: c# class polymorphism


    【解决方案1】:

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

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

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

    【讨论】:

    • 这可能适用于更简单的系统,但使用我们使用的引擎,这几乎是不可能的。我们甚至不允许使用不遵循特定准则的构造函数(它们必须有两个特定的规定参数,不能再多了),更不用说任何类型的工厂场景了。如上所述,它与我们正在做的 XML 序列化有关。我认为这涉及到反思,但这不属于我的部门。
    • 在这种情况下,我真的不明白只有在没有改变构建机制的余地的情况下才能强制使用一种类型。
    • 该死的。我似乎记得有一些关键字,比如 explicit 会做这种事情,但在这种情况下它似乎不起作用。 (我可能在想另一种语言?)哦,好吧。无论如何,它主要用于错误搜索 - 例如如果我将对象的类从子类更改为父类,我希望看到红色错误标记显示我需要更新的代码中的每个位置(如果你采用另一种方式,它可以工作),但我可以做到我想这很乏味。
    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多