gpt4 book ai didi

c# - 如何在 F# 中实现 C# 接口(interface)?

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

我想在 F# 中实现以下 C# 接口(interface):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mono.Addins;

[TypeExtensionPoint]
public interface ISparqlCommand
{
string Name { get; }
object Run(Dictionary<string, string> NamespacesDictionary, org.openrdf.repository.Repository repository, params object[] argsRest);
}

这是我尝试过的方法,但它给了我:“表达中的这一点或之前的不完整结构化构造”

#light

module Module1

open System
open System.Collections.Generic;

type MyClass() =
interface ISparqlCommand with
member this.Name =
"Finding the path between two tops in the Graph"
member this.Run(NamespacesDictionary, repository, argsRest) =
new System.Object

我做错了什么?也许缩进是错误的?

最佳答案

我在评论中验证了@Mark 的回答。给定以下 C# 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace org.openrdf.repository {
public class Repository {
}
}

namespace CSLib
{

[System.AttributeUsage(System.AttributeTargets.Interface)]
public class TypeExtensionPoint : System.Attribute
{
public TypeExtensionPoint()
{
}
}


[TypeExtensionPoint]
public interface ISparqlCommand
{
string Name { get; }
object Run(Dictionary<string, string> NamespacesDictionary, org.openrdf.repository.Repository repository, params object[] argsRest);
}

}

下面的 F# 实现(唯一的变化是在对象构造中添加 ())工作“很好”:

#light

module Module1

open System
open System.Collections.Generic;
open CSLib

type MyClass() =
interface ISparqlCommand with
member this.Name =
"Finding the path between two tops in the Graph"
member this.Run(NamespacesDictionary, repository, argsRest) =
new System.Object()

尽管您不再需要使用 #light(它是默认设置)并且您可能希望将 NamespaceDictionary 参数名称作为警告“Uppercase variable identifiers通常不应在模式中使用,并且可能表示拼写错误的模式名称。”另请注意,您需要将 MyClass 转换为 ISparqlCommand 才能访问已实现的成员(这不是您问的问题,但来自 C# 时很容易混淆):例如 (MyClass() :> ISparqlCommand).Name

关于c# - 如何在 F# 中实现 C# 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4556403/

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