FSharp code is structured as following (I'm not in control of the source).
namespace FS
[<AbstractClass; Sealed>]
type TestType() =
static member IrrelevantFunction() =
0
[<AutoOpen>]
module Extensions =
type TestType with
//How do we call this from C#
static member NeedToCallThis() =
0
module Caller =
let CallIt() =
//F# can call it
TestType.NeedToCallThis()
C# calling code is as follows
public void Caller()
{
TestType.IrrelevantFunction();
//We want to call this
//TestType.NeedToCallThis();
//Metadata:
//namespace FS
//{
// [Microsoft.FSharp.Core.AutoOpenAttribute]
// [Microsoft.FSharp.Core.CompilationMappingAttribute]
// public static class Extensions
// {
// public static int TestType.NeedToCallThis.Static();
// }
//}
//None of these compile
//TestType.NeedToCallThis();
//Extensions.TestType.NeedToCallThis.Static();
//Extensions.TestType.NeedToCallThis();
}
I don't believe the method can be called directly from C# without using reflection, as the compiled method name is not a valid method name in C#.
Using reflection, you can call it via:
var result = typeof(FS.Extensions).GetMethod("TestType.NeedToCallThis.Static").Invoke(null,null);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.