class Base
{
virtual public void FuncA()
{
MessageBox.Show("10");
}
}
public class BasePlusOne: Base
{
public void Bp1MEthod()
{
MessageBox.Show("BasePlusOne");
}
override public void FuncA()
{
MessageBox.Show("overridden by BasePlusTwo");
}
}
public class BasePlusTwo : Base
{
public void Bp1MEthod()
{
MessageBox.Show("BasePlusTwo");
}
override public void FuncA()
{
MessageBox.Show("overridden by BasePlusTwo");
}
}
public class One
{
public Base GetBase(int i)
{
if (i == 1)
{
return new BasePlusOne();
}
else
{
return new BasePlusTwo();
}
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
One one = new One();
Base bp =one.GetBase(2);
BasePlusOne b = (BasePlusOne)bp;
b.Bp1MEthod();
b.FuncA();
}
}
如我所见,我使用下面的代码来动态选择base
类。我正在将收到的base
类转换为适当的类。如果返回的类是BasePlusOne
,此代码将引发异常。有没有更好的方法来处理这种情况?这种方法有没有其他错误?动态铸造类
One one = new One();
Base bp =one.GetBase(2);
BasePlusOne b = (BasePlusOne)bp;
b.Bp1MEthod();
b.FuncA();
为了得到一个很好的回答,请提供围绕你正在尝试做更多的上下文。 –
编辑了这个问题。请重新检查。 – logeeks