Я новичок в 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();
}
}
}
2 ответа
Вам нужен шаблон адаптера.
Адаптер - это вспомогательный класс, который позволяет адаптировать класс к другому классу. В вашем примере это будет
// 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
, то вы не сможете этого сделать. Вы также не можете наследовать от двух разных классов (см. Deadly Diamond of Death).
Если вы ДОЛЖНЫ сделать что-то похожее на это, попробуйте изменить Shape
на интерфейс < / a> и создайте новый класс, который будет унаследован от Circle
, а также будет реализовывать ваш интерфейс
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.