我有一个Record工作正常的课程:
public class Record
{
protected string table;
protected string idcolumn;
public Record(string _table, string _idcol, int _id)
{
table = _table;
idcolumn = _idcol;
Id = _id;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个Order派生自的类Record,它实现了额外的方法,只适用于某种类型的记录:
class Order : Record
{
public void Start()
{
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我有一个我想要转换theRecord为的类型对象,以便我可以在其上调用该方法.RecordOrderStart
我试图施展它:
Order r = (Order)theRecord;
Run Code Online (Sandbox Code Playgroud)
但那会抛出一个InvalidCastException.
我想,对我可以创建一个新的构造Order是需要Record的,但我已经有了对象(被取出由数据库中的记录建).
我怎么能正确实现这个?
如果你得到一个InvalidCastException然后theRecord不是一个Order,你不能施展它.如果它被创建为Order或者是子类,则只能将其强制转换Order.
我的猜测是,无论从数据库中获取数据,都会创建一个Record可以创建的数据Order(并将其作为a返回Record).就像是:
public Record Fetch(int id)
{
// ... get data from db
Record rec;
if(data.Type = "Order")
rec = new Order();
else
rec = new Record();
return rec;
}
Run Code Online (Sandbox Code Playgroud)