以下产量
此构造使代码不如类型注释所指示的那样通用.类型变量'P已被约束为类型'bool'.
对于let myValue =
表达的右侧,和
此代码的通用性低于其注释所需的代码,因为显式类型变量"P"无法进行泛化.它被限制为'bool'.
对于通用<'P>
的Value
方法:
type MyTypeA<'T> (myObject : 'T) as this = let myValue = this.Value"SomeBooleanProperty" member this.Value<'P> name = typeof<'T>.GetProperty(name, typeof<'P>).GetValue(myObject, null) :?> 'P`
但是,这编译得很好,不会产生任何警告或错误:
type MyTypeB<'T> (myObject : 'T) as this = member this.Value<'P> name = typeof<'T>.GetProperty(name, typeof<'P>).GetValue(myObject, null) :?> 'P member this.Method<'P> name = this.Value<'P> name
这里发生了什么?在第一个示例中,为什么在私有值的赋值中识别的方法,而不是合法的通用方法?