将对象从派生类转换为对象

Bar*_*chs 1 c# oop

我有一个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的,但我已经有了对象(被取出由数据库中的记录建).

我怎么能正确实现这个?

D S*_*ley 5

如果你得到一个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)