Я подтвердил ответ @ Марка в комментариях.Учитывая следующий код 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
о том, что «идентификаторы переменных в верхнем регистре обычно не должны использоваться в шаблонах и могут указывать имя шаблона с ошибкой».Также обратите внимание, что вам нужно будет привести MyClass
к ISparqlCommand
, чтобы получить доступ к внедренным участникам (не вопрос, который вы задали, но легко запутаться, если вы пришли из C #): например, (MyClass() :> ISparqlCommand).Name