c# - 将对象转换为派生类的对象

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

我还有一个派生自 Record 的类 Order,它实现了额外的方法,仅适用于特定类型的记录:

class Order : Record 
{
    public void Start() 
    {
    }
}

在我的应用程序中,我有一个类型为 Record 的对象 theRecord,我想将其转换为 Order,这样我就可以调用Start 方法就可以了。

我试过转换它:

Order r = (Order)theRecord;

但这会抛出一个 InvalidCastException

我想我可以为 Order 创建一个新的构造函数,它接受一个 Record,但是我已经有了对象(它是通过从数据库)。

我怎样才能正确实现它?

最佳答案

如果您收到 InvalidCastException,则 theRecord 不是 Order,您无法转换它。只有当它被创建为 OrderOrder 的子类时,您才能转换它。

我的猜测是,无论什么从数据库中获取数据都会创建一个 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/

相关文章:

c# - 列表多重排序

c# - 如何从方法调用 'draw circle' 在 picturebox 中绘制

C# NET 服务器/客户端应用程序

c# - 按字符串中的序列提取字符 vb 2010

java - 设计问题: How to use composition the best

c# - 用其他数据结构替换二维数组

php - 语法错误,PHP OOP 中出现意外的 '.'

java - OOP 文件读取问题

Java hangman 帮助,包括我的代码

java - 按需创建 Java 对象