在函数中访问已实现接口成员的值
Access values of implemented interface members in function
我有这个界面:
interface IHaveHeaders {
Dictionary<string, object>? Headers { get; set; }
void SetHeader(string key, object value);
object? GetHeader(string key);
}
我试图在 F# 中实现它并在 SetHeader
和 GetHeader
函数中访问 Headers
字典,但我不知道如何访问 Headers
来自函数的成员:
type HeadersImpl =
interface IHaveHeaders with
member val Headers = Dictionary<string, obj>() with get, set
member this.SetHeader (key, value) = () // how do I add a new `Headers` entry?
member this.GetHeader (key) = null // how do I get an entry from `Headers`
由于 F# 不支持此答案的隐式向上转换,因此您需要显式向上转换为 this
上的接口类型。
type HeadersImpl =
interface IHaveHeaders with
member val Headers = Dictionary<string, obj>() with get, set
member this.SetHeader (key, value) =
let headers = (this :> IHaveHeaders).Headers
headers.Add(key, value)
member this.GetHeader (key) =
let headers = (this :> IHaveHeaders).Headers
headers.[key]
Philip 的回答一定能解决问题。另一种方法是不对 Headers
使用自动 属性,而是显式定义本地字段。这使您的 属性 定义更长一些,但它使访问代码更简单:
type HeadersImpl() =
let mutable headers = Dictionary<string, obj>()
interface IHaveHeaders with
member this.Headers with get() = headers and set(v) = headers <- v
member this.SetHeader (key, value) = headers.Add(key, value)
member this.GetHeader (key) = headers.[key]
我有这个界面:
interface IHaveHeaders {
Dictionary<string, object>? Headers { get; set; }
void SetHeader(string key, object value);
object? GetHeader(string key);
}
我试图在 F# 中实现它并在 SetHeader
和 GetHeader
函数中访问 Headers
字典,但我不知道如何访问 Headers
来自函数的成员:
type HeadersImpl =
interface IHaveHeaders with
member val Headers = Dictionary<string, obj>() with get, set
member this.SetHeader (key, value) = () // how do I add a new `Headers` entry?
member this.GetHeader (key) = null // how do I get an entry from `Headers`
由于 F# 不支持此答案的隐式向上转换,因此您需要显式向上转换为 this
上的接口类型。
type HeadersImpl =
interface IHaveHeaders with
member val Headers = Dictionary<string, obj>() with get, set
member this.SetHeader (key, value) =
let headers = (this :> IHaveHeaders).Headers
headers.Add(key, value)
member this.GetHeader (key) =
let headers = (this :> IHaveHeaders).Headers
headers.[key]
Philip 的回答一定能解决问题。另一种方法是不对 Headers
使用自动 属性,而是显式定义本地字段。这使您的 属性 定义更长一些,但它使访问代码更简单:
type HeadersImpl() =
let mutable headers = Dictionary<string, obj>()
interface IHaveHeaders with
member this.Headers with get() = headers and set(v) = headers <- v
member this.SetHeader (key, value) = headers.Add(key, value)
member this.GetHeader (key) = headers.[key]