我在一個復雜的專案中遇到了困難,其中隱含了一些抽象。出于隱私目的,我試圖將我的問題中的專案翻譯成更常見的專案,所以這聽起來可能有點荒謬,但我向你保證它在其原始背景關系中是有意義的。
開始。
假設我有貨運(例如飛機和貨船)
public abstract class Freight { }
public class Ship: Freight { }
public class Plane: Freight { }
現在通過設計選擇,貨運意味著運輸車輛。因此,所有貨物都會有一個串列或一系列車輛。(讓我們選擇串列,在我們的例子中)
public abstract class Vehicle { }
public abstract class Freight
{
public List<Vehicle> vehicles { get; }
}
然后,同樣通過設計選擇,決定飛機僅用于運輸摩托車,而船舶僅用于運輸汽車。這就是我的問題出現的地方。我怎么做 ?
我的第一個想法是抽象貨運中的串列屬性,以便需要在特定貨運中覆寫它(可能詳細說明它如何以不同的方式加載到貨運中),但在此程序中,我還沒有找到一種方法來指定或從貨運中限制抽象串列的內容,確保所有貨運必須有其車輛串列。
public abstract class Vehicle { }
public class Motorbike : Vehicle { }
public class Car : Vehicle { }
public abstract class Freight
{
// This becomes abstract, maybe ?
public abstract List<Vehicle> vehicles { get; }
}
public class Cargo: Freight
{
// Tentative #1
public override List<Vehicle> vehicles where Vehicle : Car { get; }
}
public class Plane: Freight
{
// Tentative #2
public override List<Motorbike> vehicles { get; }
}
但這些似乎都不起作用。
我的問題是:是否有抽象設計概念可以讓我達到我應該知道的規范/約束目標并幫助我解決我所缺少的?或者是否有關于替代設計的此類主題的任何官方(Microsoft)建議以實作預期行為?
嘗試澄清這個概念如下(回答后編輯):該軟體試圖模仿非軟體的規則和行為。這些在其自己的檔案中進行了描述,并且規則集對于物理產品、其應用以及在其制造程序中如何/有哪些限制適用于它是有意義的。我將這個概念翻譯成貨運,因為這是我想到的唯一一個“簡單”的例子,沒有詳細說明我的公司正在制造什么產品,以及為什么這些限制是這樣的。
我希望我已經足夠清楚了,我發現這很難解釋,因為它很難找到解決方案。所以我感謝你試圖理解。
非常感謝你。
uj5u.com熱心網友回復:
這聽起來像是仿制藥的作業。Vehicle您可以給出Freight的串列,而不是列出T,然后將其約束T為 的子類Vehicle:
public abstract class Vehicle { }
public class Motorbike : Vehicle { }
public class Car : Vehicle { }
public abstract class Freight<T>
where T: Vehicle
{
public List<T> Vehicles { get; }
}
public class Ship: Freight<Car>
{
}
public class Plane: Freight<Motorbike>
{
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/479837.html
上一篇:如何鏈接父子css變換變數
