如何使用 属性 创建 C# class 的实例,其 setter 是私有的..来自 F#
How to create an instance of C# class with a property whose setter is private..from F#
所以我正在处理 F# 项目,需要访问一些 C# classes。特别是,其中一个 C# class 看起来像这样:
class LoginRequest {
public string Scope {get; private set;}
}
现在使用 C# 本身,可以使用对象初始化程序轻松创建实例:例如 new LoginRequest() {Scope = "all"}
。
但是,我想不出从 F# 创建这样一个实例的方法。有什么建议吗?
对于给定的示例,没有简单的(非反射,见下文)方法,即私有 setters 无法从 C# 和 F# 访问:
new LoginRequest { Scope = "s" }; // CS0272 The property or indexer 'LoginRequest.Scope' cannot be used in this context because the set accessor is inaccessible
LoginRequest(Scope = "s") // error FS0495: The object constructor 'LoginRequest' has no argument or settable return property 'Scope'.
要访问私有 setter,您可以使用
let r = LoginRequest()
typeof<LoginRequest>.GetProperty("Scope").GetSetMethod(true).Invoke(r, [| "scope" |])
r.Scope // scope
但是,我强烈反对使用反射。最明显的原因是您失去了编译时安全性。
所以我正在处理 F# 项目,需要访问一些 C# classes。特别是,其中一个 C# class 看起来像这样:
class LoginRequest {
public string Scope {get; private set;}
}
现在使用 C# 本身,可以使用对象初始化程序轻松创建实例:例如 new LoginRequest() {Scope = "all"}
。
但是,我想不出从 F# 创建这样一个实例的方法。有什么建议吗?
对于给定的示例,没有简单的(非反射,见下文)方法,即私有 setters 无法从 C# 和 F# 访问:
new LoginRequest { Scope = "s" }; // CS0272 The property or indexer 'LoginRequest.Scope' cannot be used in this context because the set accessor is inaccessible
LoginRequest(Scope = "s") // error FS0495: The object constructor 'LoginRequest' has no argument or settable return property 'Scope'.
要访问私有 setter,您可以使用
let r = LoginRequest()
typeof<LoginRequest>.GetProperty("Scope").GetSetMethod(true).Invoke(r, [| "scope" |])
r.Scope // scope
但是,我强烈反对使用反射。最明显的原因是您失去了编译时安全性。