【发布时间】:2010-07-23 14:48:25
【问题描述】:
假设您从这个存根开始:
[<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# 规范说,如果您覆盖受保护的函数,则生成的函数将受到保护。这是不正确的。如果您不指定可访问性,则生成的覆盖无论如何都会公开(违反合同)。
【问题讨论】:
标签: .net f# constructor iserializable