比方說,你這個存根開始:如何在F#中實現了ISerializable
[<Serializable>]
type Bounderizer =
val mutable _boundRect : Rectangle
new (boundRect : Rectangle) = { _boundRect = boundRect ; }
new() = { _boundRect = Rectangle(0, 0, 1, 1); }
new (info:SerializationInfo, context:StreamingContext) =
{ // to do
}
interface ISerializable with
member this.GetObjectData(info, context) =
if info = null then raise(ArgumentNullException("info"))
info.AddValue("BoundRect", this._boundRect)
// TODO - add BoundRect property
的問題是,規範說,「一般情況下,如果類是不密封此構造應該受到保護。」 F#沒有受保護的關鍵字 - 那麼我該怎麼做?
約束(由於要求在API級別完美匹配現有的C#類):
- 必須實現ISerializable的
- 構造必須得到保護
編輯 - 有趣的額外信息 F#規範說,如果你重寫一個保護函數,結果函數將被保護。這是不正確的。如果您沒有指定可訪問性,則無論如何(違反合同),最終的覆蓋將公開。
當然,但它錯過了我完全匹配現有API的約束。 – plinth 2010-07-24 10:09:41