当我编译像
这样的F#模块时module internal Test =
let testnum = 5
let testfun = fun (s, p) -> System.Console.WriteLine(s, p)
生成的IL代码中的前成员变为具有getter仅返回常量的属性,后者被编译为真正的函数。基本上,生成的IL的C#类似于
internal static class Test {
internal static int testnum { get { return 5; } }
internal static void testfun(string s, object p) {
System.Console.WriteLine(s, p);
}
}
有没有任何已知方法强制将这些编译成真正的CIL字段?就像在
中一样internal static class Test {
internal static readonly int testnum = 5;
internal static readonly FSharpFunc<Tuple<string, object>, Unit> testfun =
new SomeInternallyGeneratedClosure();
}
}
答案 0 :(得分:3)
为了在F#中声明一个公共字段,您需要在类声明中使用explicit field。
让类声明中的绑定不允许使用其他访问修饰符并且是私有的,因此它们不能用于创建公共字段。