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

时间:2015-09-04 00:46:42

标签: f# cil

当我编译像

这样的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();
  }
}

1 个答案:

答案 0 :(得分:3)

为了在F#中声明一个公共字段,您需要在类声明中使用explicit field

让类声明中的绑定不允许使用其他访问修饰符并且是私有的,因此它们不能用于创建公共字段。