是否可以强制 .NET F# 编译器在模块中生成 CIL 字段?

Is it possible to force the .NET F# compiler generate a CIL field in a module?

当我编译 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();
  }
}

为了在 F# 中声明 public 字段,您需要在 class 声明中使用 explicit field

class 声明中的 Let 绑定不允许额外的访问修饰符并且是私有的,因此它们不能用于创建 public 字段。