Frage

Erster Teil: Aufruf F # von F #

Lassen Sie uns sagen, dass wir die folgende Art haben in F # definiert:

type MyClass =
    static member Overload1 (x, y) = "Pim"
    static member Overload1 (x : System.Tuple<_, _>) = "Pam"
    static member Overload1 x = "Pum"

Sie befinden sich nun in einem anderen Modul (in einer anderen Datei).

Wie kann man jede der drei Methoden aufrufen oben gezeigt?

Zweiter Teil: Aufruf C # von F #

Jetzt definieren Sie eine Klasse in C #:

public class MyClass {
    public static string Overload1<a, b>(a x, b y) { return "Pim"; }
    public static string Overload1<a, b>(Tuple<a, b> x) { return "Pam"; }
    public static string Overload1<a>(a x) { return "Pum"; }
}

Von einem F # -Code, wie kann man jede der drei Methoden aufrufen, definiert nun in C #?

War es hilfreich?

Lösung

Hier ist eine Antwort auf den F # Teil:

MyClass.Overload1(1,2)
MyClass.Overload1<_,_>(unbox (box (1,2)) : System.Tuple<int,int>)
MyClass.Overload1 1

Andere Tipps

Hmm, ich bin nicht klar, ob es möglich ist, die F # „Pam“ Methode aufzurufen. Aber hier ist der Rest.

C #:

using System;
namespace CSharp
{
    public class MyClass
    {
        public static string Overload1<a, b>(a x, b y) { return "Pim"; }
        public static string Overload1<a, b>(Tuple<a, b> x) { return "Pam"; }
        public static string Overload1<a>(a x) { return "Pum"; }
    }
}

F #:

namespace FSharp

type MyClass =
    static member Overload1 (x, y) = "Pim"
    static member Overload1 (x : System.Tuple<_, _>) = "Pam"
    static member Overload1 x = "Pum"

namespace DoIt

module Examples =
    let CallFSharp() =
        printfn "%s" <| FSharp.MyClass.Overload1(1,2)   // Pim
        printfn "%s" <| FSharp.MyClass.Overload1((1,2)) // Pum!
        printfn "%s" <| FSharp.MyClass.Overload1(())    // Pum


    let CallCSharp() =
        printfn "%s" <| CSharp.MyClass.Overload1(1,2)             // Pim
        printfn "%s" <| CSharp.MyClass.Overload1<int,int>((1,2))  // Pam
        printfn "%s" <| CSharp.MyClass.Overload1(())              // Pum

    do
        CallFSharp()        
        CallCSharp()        

Natürlich in der Praxis wird es selten Methoden in IL zu sehen, dass take System.Tuple<...> Objekte als Parameter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top