我正在使用带有 C# 的 SolidWorks API。
通过向项目添加一系列 COM 引用,将其合并到 Visual Studio 中。API 带有各种类。我想创建一个子类,将方法添加到 API 附带的类中,以便为超类添加功能。
下面的代码显示了一个没有 API 的简单示例。当然,它工作得很好。
public class x
{
public double a;
}
public class y : x
{
public double b;
public void setAandB(double aa, double bb)
{
this.a = aa;
this.b = bb;
}
}
这是我尝试使用子类添加方法的示例。超类是SketchPoint。
public class SketchPointWriter : SketchPoint
{
public void writeXML(XmlWriter writer, string nameElement)
{
writer.WriteStartElement(nameElement);
writer.WriteString(Convert.ToString(((SketchPoint)this).X * 1000.0) + ", ");
writer.WriteString(Convert.ToString(((SketchPoint)this).Y * 1000.0) + ", ");
writer.WriteString(Convert.ToString(((SketchPoint)this).Z * 1000.0));
writer.WriteEndElement();
}
}
API 中的SketchPoint无法将自身写入 XML 文件。所以,我想通过创建一个子类,继承所有超类的属性和方法,将这个功能添加到类中,然后添加我的新方法。
请注意this的显式类型转换。如果没有这种类型转换,Visual Studio 不知道.X是this的一个属性。就其本身而言,我觉得这很令人费解,所以我用一些重字体来解决它。
即使使用这种类型转换,它也不会编译,因为 Visual Studio 会抛出错误,因为我没有显式创建每个方法: 'ExportHOE.SketchPointWriter' 没有实现接口成员'SldWorks.ISketchPoint.Type'
这在我心中产生了一个难题。如果我需要重写所有方法,继承有什么意义?API 不是源代码,它是一个 DLL(?),所以我无权访问源代码。
所以,问题是:
- 我的代码是否正确并且 API 的实现方式实际上不允许继承它们自己的对象(它实际上是一个不允许继承的接口)?
- 我的代码是否写得不好并且重写代码会启用属性和方法的继承?
- 是否无法判断,因此,我真的应该放弃并编写另一个解决方案吗?
- 是否有一种聪明的解决方法,它不如原生 C# 理想,但创建了相同的功能?