0
我正在用C#編寫一個庫,並且爲了絕對確保對象未放置在錯誤的集合和變量中,我想將它們分爲不同的類,儘管這些類完全一樣地完成了同樣的事情。例如:使用具有相同簽名的不同類用於防禦性編程
public class ObjectA
{
private String name;
//... related property
}
public class ObjectB
{
//... exact same as ObjectA
}
public class ObjectC
{
private ObjectB relatedB;
}
雖然由A和B所執行的字段和操作是完全相同的,ObjectC的實例必須與對象B和對象B ONLY,從未對象A的實例。
實際上,我有四個具有相同行爲的類,它們必須以這種方式與另外三個類共同關聯。我已經考慮創建一個抽象類,如:
internal abstract class ObjectBase
{
private String name;
//... related property
}
當我開始編寫的東西,如隱性和顯性運營商,克隆,而另一些需要直接實例化代碼,就會出現問題。顯然,我不能在抽象類中實現這樣的代碼,但我也不希望ObjectBase在內部或其他地方可用。
我還考慮添加一個「類型」字段 - 作爲枚舉或somesuch - 來區分ObjectBase的實例,而不是一堆空的子類。但是,我不相信別人(或者我自己)足夠高效地使用它,並且希望爲變量增加不同引用(類型)的安全性。
我的問題是,C#是否有這種防禦性編程問題的本地解決方案?如果沒有,有什麼建議嗎?
我不明白你的困境。你絕對可以讓你的抽象基類處理克隆操作。至於不信任你的開發者,這是一個完全獨立的問題。在一天結束時,您必須記錄您的API,在適當的地方提供適當的封裝和訪問修飾符,並讓它們使用您的庫。別忘了,我可以輕鬆地使用反射或AoP以任何我想要的方式改變庫。在某些時候,你只需要讓它成爲現實。 –
什麼是ObjectA,ObjectB和ObjectC的真實生活解釋? – PiotrWolkowski