簡體   English   中英

如何將父類轉換為子類

[英]How to Cast Parent Class to Child Class

我有一個問題,當我用某些條件聲明父類時,如何將父類轉換為子類或返回子類

例如:我有參數 side = 4 ,那么當我聲明新的多邊形時,是否有可能通過父類將矩形返回給我?

另外我怎么知道返回是矩形還是三角形? 有可能這樣做嗎?

代碼如下:

Public Class Polygon
{
   public Polygon(int side)      
   {
     .....
   }
}

Public Class Rectangle : Polygon
{
}

Public Class Triangle : Polygon
{
}


Polygon Shape = new Polygon(3);
var t = Shape.GetChildClass();

是的。 使用靜態工廠方法來創建子類。

// For educational purposes only!!!
public class Polygon
{
    public static Polygon Create(int sides) 
    {
        switch (sides)
        {
        case 3:
            return new Triangle();
        // ...
        default: 
            throw new ArgumentOutOfRangeException(/*...*/);
        }
    }
}


var shape = Polygon.Create(3);
var isTriangle = shape is Triangle;

也就是說,沿着這條路走下去會帶來很多麻煩......

當然,多邊形將具有其邊長或等價物的序列。 即使這還不夠,因為菱形可能不是矩形。 加入 Square、Diamond、RegularPolygon 等,你就會一團糟。 最好只擁有一個包含 IsTriangle、IsRectangle 等方法的 Polygon 類。 您可能還需要 IsCongruent 和其他比較。 在一堂課上做要簡單得多。

嘗試制作如下功能:

public bool IsTriangle()
{
   ...
}

然后,

if(Shape.IsTriangle())
{
   Triangle t=new Triangle(Shape);
   ...
}

基本上,您需要確定多邊形內形狀的子類類型並設置子類的不同成員。 這可能是一團糟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM