c# -从第三方库导入类并使其成为派生类(或类似的东西)
本文关键字:派生 第三方 导入 | 更新日期: 2023-09-27 18:07:16
我是c#的初学者。我想从第三方库导入一个类,并使其成为派生类(或类似的东西)。在下面的例子中,我如何创建一个类,可以有CircleSpecificMethods()和CommonShapeMethods()?
谢谢!
第三方库:namespace ThirdPartyLib
{
public class Circle
{
public CircleSpecificMethods()
{
...
}
}
public class Triangle
{
public TriangleSpecificMethods()
{
...
}
}
}
我的程序:
using ThirdPartyLib;
namespace MyProgram
{
public class Shape
{
public CommonShapeMethods()
{
...
}
}
public class Rectangle : Shape
{
public RectangleSpecificMethods()
{
...
}
}
public static class Program
{
public static void Main()
{
var rectangle = new Rectangle();
var circle = new Circle();
rectangle.CommonShapeMethods();
rectangle.RectangleSpecificMethods();
circle.CommonShapeMethods(); // How can I make circle to have CommonShapeMethods as well?
circle.CircleSpecificMethods();
}
}
}
您所要求的是适配器模式。
Adapter是一个辅助类,它允许你将一个类改编成另一个类。在您的示例中,它将是
// adapter fulfills your requirement, it is a shape
public class CircleToShapeAdapter : Shape
{
private Circle _circle { get; set; }
// but it takes their object as a source
public CircleToShapeAdapter( Circle circle )
{
this._circle = circle;
}
// for any method that is required by your Shape specification
// you just find a way to implement the method using their API
public void ShapeMethod()
{
circle.DoSomething();
}
}
然后你可以用它们的圆来创建形状
Shape shape = new CircleToShapeAdapter( circle );
请注意,适配器仍然可以暴露特定于圆圈的方法,但它不会充当圆圈(不会从它继承),因为c#不允许您从两个类派生。这意味着它们的基类或者你的基类必须是一个接口。
如果你不能改变你的第三方从Shape
继承,那么你不能这样做。你也不能继承2个不同的职业(参见死亡之钻)。
如果你必须做一些接近它的事情,尝试将Shape
更改为接口,并创建一个新的类,它将继承Circle
,并将实现你的接口