Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 函数中已实现接口成员的访问值_F# - Fatal编程技术网

F# 函数中已实现接口成员的访问值

F# 函数中已实现接口成员的访问值,f#,F#,我有这个界面: 接口iHaveHeader{ 字典?标题{get;set;} void SetHeader(字符串键、对象值); 对象?GetHeader(字符串键); } 我试图在F#中实现它,并在SetHeader和GetHeader函数中访问Headers字典,但我不知道如何从函数中访问Headers成员: type HeadersImpl= 接口iHaveHeader与 成员val Headers=Dictionary(),带get,set member this.SetHeader(

我有这个界面:

接口iHaveHeader{
字典?标题{get;set;}
void SetHeader(字符串键、对象值);
对象?GetHeader(字符串键);
}
我试图在F#中实现它,并在
SetHeader
GetHeader
函数中访问
Headers
字典,但我不知道如何从函数中访问
Headers
成员:

type HeadersImpl=
接口iHaveHeader与
成员val Headers=Dictionary(),带get,set
member this.SetHeader(key,value)=()//如何添加新的'Headers'条目?
member this.GetHeader(key)=null//如何从`Headers'获取条目`
因为F#在这个答案中不支持隐式向上转换,所以您需要显式向上转换到
这个
上的接口类型

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]
type HeadersImpl=
接口iHaveHeader与
成员val Headers=Dictionary(),带get,set
成员this.SetHeader(键、值)=
let headers=(this:>IHaveHeaders).headers
headers.Add(键、值)
成员this.GetHeader(键)=
let headers=(this:>IHaveHeaders).headers
标题。[键]
因为F#在这个答案中不支持隐式向上转换,所以您需要显式向上转换到
这个
上的接口类型

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]
type HeadersImpl=
接口iHaveHeader与
成员val Headers=Dictionary(),带get,set
成员this.SetHeader(键、值)=
let headers=(this:>IHaveHeaders).headers
headers.Add(键、值)
成员this.GetHeader(键)=
let headers=(this:>IHaveHeaders).headers
标题。[键]

菲利普的回答肯定会奏效。另一种方法是不为
标题使用automatic属性,而是显式定义本地字段。这使您的属性定义更长一些,但使访问代码更简单:

type HeadersImpl()=
让可变头=字典()
接口iHaveHeader与

使用get()=Headers和set(v)=Headers来成员this.Headers来自Philip的答案肯定会奏效。另一种方法是不为
标题使用automatic属性,而是显式定义本地字段。这使您的属性定义更长一些,但使访问代码更简单:

type HeadersImpl()=
让可变头=字典()
接口iHaveHeader与
使用get()=Headers和set(v)=Headers成员this.Headers