은의 당신이 스텁로 시작한다고 가정 해 봅시다 :어떻게
[<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# 클래스를 기존의 일치) :
- 이
- 생성자는
EDIT를 보호해야를 ISerializable을 구현해야합니다 - 흥미 추가 정보 를 F # 스펙에 따르면 보호 된 함수를 재정의하면 결과 함수가 보호됩니다. 이것은 잘못되었습니다. 접근성을 지정하지 않으면 결과 무시가 무엇이든지 공개됩니다 (계약 위반).
물론 기존 API를 정확히 일치시키는 제약이 있습니다. – plinth