是否可以强制 .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 字段。
当我编译 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 字段。