C# 및 .NET Framework를 사용하여 AutoCAD 2014 용 플러그인을 작성하고 있습니다. 아이디어는 내가 그래서 내가 '방법으로 데이터를 조작 할 수 있습니다 이미 OpeningDataTable
의 인스턴스로 도면에서 AutoCAD 도면에 그려진 테이블을 당겨 할 것입니다C#의 하위 클래스에 상위 클래스 캐스팅
public class OpeningDataTable : Autodesk.AutoCAD.DatabaseServices.Table
: 나는 오토 데스크의 Table
클래스과 같이 확장 썼다. 그래서 같이 그 일을하고있다 :
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;
}
}
는 그러나, 나는 내가 OpeningDataTable
개체 (자식 클래스)에 Table
객체 (부모 클래스)를 변환 할 수 없다는 오류가 발생합니다.
이 문제에 대한 간단한 해결 방법이 있습니까?
번호 당신은 A' B''에'캐스팅 수 없습니다를 '또는 B를 상속받은 어떤 것. 여기서 변수의 실제 타입은'Table'이며, 이것을'OpeningDataTable'으로 형변환하려고합니다.'Table'은'OpeningDataTable'을 상속받지 않습니다. – MarcinJuraszek