FSI는 이에 대한 특별한 지원을 제공하지 않지만 원하는 것을하기 위해 반사를 사용할 수 있습니다.
open System.Reflection
let field = typeof<MyType>.GetField("fieldName", BindingFlags.NonPublic ||| BindingFlags.Instance)
field.SetValue(myInstance, newVal)
더 쉽게 진행할 수 있도록 메소드 나 연산자를 정의 할 수 있습니다. 예를 들어 당신은 private 필드에 할당 F #의 동적 할당 연산자를 설정할 수 있습니다
let (?<-) o s v =
let field = (o.GetType()).GetField(s, BindingFlags.NonPublic ||| BindingFlags.Instance)
field.SetValue(o,v)
myInstance?fieldName <- newVal (* Note: no quotes around fieldName here *)
다음은 공공 또는 민간 필드, 속성 또는 메서드를 해결하기 위해 일부 원유 코드입니다. 이것이 실패 할 수있는 방법은 많습니다 (특히 오버로드 된 메서드에서이 메서드를 사용하려고하면 작동하지 않습니다). 테스트 및 작품
let (t:System.Type) = "test"?GetType()?BaseType
출처
2009-11-03 17:06:46
kvb
+1,이 동적 같은 메서드와 속성을 호출 할 수 있습니다와
. – gradbot