Я пишу плагин для AutoCAD 2014 с использованием C# и .NET Framework. Я продлил Table
класса компании Autodesk, как так:Кастинг родительского класса для дочернего класса в C#
public class OpeningDataTable : Autodesk.AutoCAD.DatabaseServices.Table
Идея заключается в том, что я хочу, чтобы вытащить таблицу уже нарисованную на AutoCAD рисунка из чертежа в качестве экземпляра OpeningDataTable
таким образом я могу манипулировать данные с методами I» я написал. Я делаю это так:
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
объекта (класс ребенка).
Есть ли обходной путь для этой проблемы?
Нет, вы не можете бросить 'a' в' b', если фактический тип 'Ā' не' B 'или что-то, что наследует' B'. Здесь фактическим типом вашей переменной является «Таблица», и вы пытаетесь передать ее в «OpeningDataTable», где «Таблица» не наследует 'OpeningDataTable'. – MarcinJuraszek