c# - 在 C# 中将父类转换为子类

标签 c# .net casting autocad-plugin

我正在使用 C# 和 .NET Framework 为 AutoCAD 2014 编写一个插件。我扩展了 Autodesk 的 Table 类,如下所示:

public class OpeningDataTable : Autodesk.AutoCAD.DatabaseServices.Table

我的想法是,我想将已在 AutoCAD 绘图上绘制的表格作为 OpeningDataTable 的实例从绘图中取出,以便我可以使用我编写的方法来操作数据。我这样做是这样的:

OpeningDataTable myTable = checkForExistingTable(true);

public Autodesk.AutoCAD.DatabaseServices.Table checkForExistingTable(bool isWindow)
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; //Current drawing
            Transaction tr = doc.TransactionManager.StartTransaction();
            DocumentLock docLock = doc.LockDocument();
            TypedValue[] tableItem = new TypedValue[] { new TypedValue(0, "ACAD_TABLE") };
            SelectionFilter tableSelecFilter = new SelectionFilter(tableItem);
            Editor ed = doc.Editor; //Editor object to ask user where table goes, subclass of Document

            using (tr)
            {
                PromptSelectionResult selectResult = ed.SelectAll(tableSelecFilter);
                if (selectResult.Status == PromptStatus.OK)
                {
                    SelectionSet tableSelSet = selectResult.Value;
                    for (int i = 0; i < tableSelSet.Count; i++)
                    {
                        Autodesk.AutoCAD.DatabaseServices.Table tableToCheck = (Autodesk.AutoCAD.DatabaseServices.Table)tr.GetObject(tableSelSet[i].ObjectId, OpenMode.ForRead);
                        String tableTitle = tableToCheck.Cells[0, 0].Value.ToString();
                        if(tableTitle.Equals("Window Schedule") && isWindow == true)
                            return (OpeningDataTable)tableToCheck;
                        if (tableTitle.Equals("Door Schedule") && isWindow == false)
                            return (OpeningDataTable)tableToCheck;
                    }
                }
                return null;
            }
        }

但是,我收到一条错误消息,指出我无法将 Table 对象(父类)转换为 OpeningDataTable 对象(子类)。

这个问题有简单的解决方法吗?

最佳答案

您需要为 OpeningDataTable 创建一个以 Table 作为参数的构造函数。

无法将 Table 转换为 OpeningDataTable 的原因是 Table 不是 OpeningDataTable就像 object 不是 int 一样。

关于c# - 在 C# 中将父类转换为子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692925/

相关文章:

c# - 在 Content Size Fitter 更新内容的 Rect Transform 后,如何让 Unity Scroll Rect 滚动到底部?

c# - 全局内存访问

.net - 忽略 Perforce 文件夹差异中的文件夹

c# - 如何在类里面再次调用 "static void Main(string[] args) "

java - 提取参数化类型的值时,将参数化类型类参数转换为子类形式

c# - 固定对象到字节数组

c# - 是否可以在 RadGrid 中垂直而不是水平显示数据?

.net - ConstructorInfo.Invoke 与委托(delegate)

c - 我应该在 Visual Studio 中投 void** 返回吗

java - 为什么可以转换泛型类?