gpt4 book ai didi

c# - 在 F# 中,具有强制构造函数参数的对象初始化程序语法是什么?

转载 作者:太空狗 更新时间:2023-10-29 20:04:38 25 4
gpt4 key购买 nike

假设有一个类有一个公共(public)构造函数,它接受一个参数。此外,我还想设置多个公共(public)属性。 F# 中的语法是什么?例如在 C# 中

public class SomeClass
{
public string SomeProperty { get; set; }

public SomeClass(string s)
{ }
}

//And associated usage.
var sc = new SomeClass("") { SomeProperty = "" };

在 F# 中,我可以使用构造函数或 property setters 完成此操作,但不像在 C# 中那样同时进行。例如,以下内容无效

let sc1 = new SomeClass("", SomeProperty = "")
let sc2 = new SomeClass(s = "", SomeProperty = "")
let sc3 = new SomeClass("")(SomeProperty = "")

我好像漏掉了什么,但是什么?

正如 David 所指出的,在 F# 中完成这一切是可行的,但出于某种原因,至少对我而言 :),当在 F# 中使用的类在 C# 中定义。至于这样的例子是 TopicDescription (为了增加一个例子而公开一些东西)。一个人可以写,例如

let t = new TopicDescription("", IsReadOnly = true)

相应的编译器错误将是Method 'set_IsReadOnly' is not accessible from this code location

最佳答案

您遇到的问题是 IsReadOnly有一个内部二传手。

member IsReadOnly : bool with get, internal set

如果你想直接设置它,你需要继承 TopicDescription

您正在查看的构造函数语法是完全可以接受的。

let test = new Microsoft.ServiceBus.Messaging.TopicDescription("", EnableBatchedOperations=true)

编译对我来说很好。

关于c# - 在 F# 中,具有强制构造函数参数的对象初始化程序语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24759355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com