2014-06-08 6 views
0

我是C#的初學者。我想從第三方庫中導入一個類,並將其作爲派生類(或類似的東西)。在下面的示例中,如何創建可以同時具有CircleSpecificMethods()和CommonShapeMethods()的類?C# - 從第三方庫導入類,並使其派生類(或類似的東西)

謝謝!

第三方庫:

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 Pattern

適配器是一種輔助類,可讓您將類調整爲另一類。在你的榜樣,這將是

// 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#不允許你從兩個類派生。這意味着無論是他們的基類還是你的基類,都必須是一個接口。

0

如果你不能改變你的第三方從Shape繼承,那麼你不能做到這一點。您也不能繼承2個不同的類(請參閱Deadly Diamond of Death)。

如果你必須做一些接近它嘗試改變ShapeInterface並創建一個新類將從Circle繼承,也將實現你的接口

相關問題