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();
        }
    }
}

c# -从第三方库导入类并使其成为派生类(或类似的东西)

您所要求的是适配器模式。

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,并将实现你的接口