Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制定义精确类_C#_Class_Polymorphism - Fatal编程技术网

C# 强制定义精确类

C# 强制定义精确类,c#,class,polymorphism,C#,Class,Polymorphism,假设我有几门课: public class ParentClass { <common functionality> ... } public class ChildClass : ParentClass { <additional functionality> ... } 我以后无法将东西定义为: thing = new ChildClass(); 我希望多态性达到ChildClass继承所有ParentClass功能的程度,但我不

假设我有几门课:

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

public class ChildClass : ParentClass
{
    <additional functionality>
    ...
}
我以后无法将
东西定义为:

thing = new ChildClass();

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

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

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

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

这可能适用于更简单的系统,但对于我们使用的引擎,这几乎是不可能的。我们甚至不允许使用不遵循特定指导原则的构造函数(它们必须有两个特定的指定参数,不能有更多),更不用说任何类型的工厂场景了。如上所述,它与我们正在进行的XML序列化有关。我认为这涉及到思考,但这不属于我的部门。在这种情况下,我真的不明白,如果你没有改变构建机制的余地,你怎么能强制一种类型。该死。我似乎记得有一些关键字,比如
explicit
,可以做这类事情,但在这种情况下似乎不起作用。(我可能在想另一种语言?)。不管怎样,它主要用于bug搜索——例如,如果我将一个对象的类从子对象更改为父对象,我希望看到红色的错误标记显示我需要更新的代码中的每个地方(如果换一种方式,它会起作用),但我可以用我认为乏味的方式来完成。
public ParentClass thing;
thing = ParentClassFactory.Build();