c# - 动态设置新实例类型

标签 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();
}

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

我知道如何使用接口(interface),但我不确定如何最初为实例设置类型。

我想减少重复,并做这样的事情:

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

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

最佳答案

您想要做的事情类似于下面的代码,其中 ISomeTypeSomeTypeSomeOtherType 都实现的接口(interface)。

原始代码的问题是您在每个 if 语句内声明了子变量,因此该 block 之外的任何代码都无法使用它。

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

关于c# - 动态设置新实例类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22354478/

相关文章:

interface - Go:工厂返回指针和接口(interface){}类型

typescript - 我可以覆盖 TypeScript 接口(interface)中的键吗?

java - @MustOverride 注释?

c# - 解决多接口(interface)实现

c# - 在 gridview 中处理空日期时间

c# - 动态初始化窗体对象

C# JavaScriptSerializer 序列化接口(interface)中不存在但存在于原始对象中的字段

c# - NHibernate 映射 - 一对一(或一对零)

c# - 没有注册类型 'MyType' 的服务

c# - 在 C# 中,接口(interface)中定义的属性是否适用于实现类?