我有一个类 Record
可以正常工作:
public class Record
{
protected string table;
protected string idcolumn;
public Record(string _table, string _idcol, int _id)
{
table = _table;
idcolumn = _idcol;
Id = _id;
}
}
我还有一个派生自 Record
的类 Order
,它实现了额外的方法,仅适用于特定类型的记录:
class Order : Record
{
public void Start()
{
}
}
在我的应用程序中,我有一个类型为 Record
的对象 theRecord
,我想将其转换为 Order
,这样我就可以调用Start
方法就可以了。
我试过转换它:
Order r = (Order)theRecord;
但这会抛出一个 InvalidCastException
。
我想我可以为 Order
创建一个新的构造函数,它接受一个 Record
,但是我已经有了对象(它是通过从数据库)。
我怎样才能正确实现它?
最佳答案
如果您收到 InvalidCastException
,则 theRecord
不是 Order
,您无法转换它。只有当它被创建为 Order
或 Order
的子类时,您才能转换它。
我的猜测是,无论什么从数据库中获取数据都会创建一个 Record
,而它可以创建一个 Order
(并将其作为 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;
}
关于c# - 将对象转换为派生类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18700998/