关于继承和演员表

本文关键字:继承 于继承 | 更新日期: 2023-09-27 18:36:46

我面临着一个我不知道如何管理的问题。

我开发了一个在DataTable上实现非唯一索引的类;为了处理商品,我正在考虑开发我的IndexedTable,显然,继承自DataTable,添加一个使用非唯一索引对表执行搜索的方法

我写道:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace DWH_Core
{
    class IndexedTable : DataTable
    {
        //private  DataTable m_tbl;
        //public Dictionary<Int32, Int32> idx;
        private Index_NonUnique m_idx = null;
        public void buildNonUniqueIndex(string keyField)
        {
            m_idx = new Index_NonUnique();
            m_idx.buildIndex(this, keyField);
            return;
        }
        public DataRow[] search (string key)
        {
            return m_idx.search(key);
        }
        public DataRow[] search(int key)
        {
            return m_idx.search(key);
        }
        public DataRow[] search(short key)
        {
            return m_idx.search(key);
        }
    }
}

和相关类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace DWH_Core
{
    class Index_NonUnique
    {
        private string m_KeyField;
        private ILookup<object, DataRow> m_IdxByKey;
        public void buildIndex(DataTable tbl, string keyField)
        {
            m_KeyField = keyField;
            IEnumerable<DataRow> enumerable = tbl.AsEnumerable();
            m_IdxByKey = enumerable.ToLookup(o => o[keyField]);
        }

        public DataRow[] search(string keyValue)
        {
            return m_IdxByKey[keyValue].ToArray();
        }
        public DataRow[] search(int keyValue)
        {
            return m_IdxByKey[keyValue].ToArray();
        }
        public DataRow[] search(short keyValue)
        {
            return m_IdxByKey[keyValue].ToArray();
        }
    }
}

问题是,当我以一种常用方式生成 DataTable 类并尝试将其强制转换为 IndexedTable 时,我收到运行时错误"无法从类型'系统.数据.数据表'的对象执行转换DWH_Core.索引表'。我不想使用 private DataTable m_tbl 成员,因为我想将所有 DataTable 成员应用于我的 IndexedTable 对象,但我无法理解如何管理此错误。最后,我的目标是写这样的东西:

 IndexedTable tmpTable = null;
 SqlCommand cmd = "SELECT * FROM SOME_TABLE"
 SqlDataReader rdr = cmd.ExecuteReader();
 m_SAP_Allocazione = (IndexedTable)rdr.ToTable();
 m_SAP_Allocazione.buildNonUniqueIndex("PERNR");

关于继承和演员表

下面是

有关将对象强制转换为派生类的一些答案。

是否可以在 C# 中使用显式类型转换将基类对象分配给派生类引用?

将基类转换为派生类

答案是否定的,这是不可能的。

执行此操作的最简单方法是执行您的建议:创建一个派生类(BaseClass)构造函数