动态设置新实例的类型

时间:2014-03-12 14:22:16

标签: c# interface

我有一个问题,我正在以完全相同的方式为不同的孩子类型创建一个新孩子。我无法重用我调用它的方法,因为我不知道如何动态设置新实例的类型。

if (radioSomeType.Checked)
{
    SomeType child = new SomeType();
    child.MdiParent = parent;
    child.Open();
}
else if(radioSomeOTherType.Checked)
{
    SomeOtherType child = new SomeOTherType();
    child.MdiParent = parent;
    child.Open();
}

我设置了一些其他属性并在此片段中调用了其他一些方法,但我在此示例中删除了它们。

我知道如何使用接口,但我不知道如何为该实例初始设置类型。

我想减少重复,并执行以下操作:

if (radioSomeType.Checked)
{
    SomeType child = new SomeType();
}
else if(radioSomeOTherType.Checked)
{
    SomeOtherType child = new SomeOTherType();
}
child.MdiParent = parent;
child.Open();

我的问题是,即使我尝试使用接口,我仍然需要在该条件内以某种方式创建实例(这是我期望的)。

1 个答案:

答案 0 :(得分:4)

您要做的是类似下面的代码,其中ISomeTypeSomeTypeSomeOtherType都实现的接口。

原始代码的问题在于您在每个if语句中声明了子变量,因此它不能用于该块之外的任何代码。

ISomeType child;
if (radioSomeType.Checked)
{
    child = new SomeType();
}
else if(radioSomeOTherType.Checked)
{
    child = new SomeOTherType();
}
child.MdiParent = parent;
child.Open();