namespace MyClassNamespace
type MyClass() =
member this.PrintValue(?value:int) =
match value with
| Some(n) -> printfn "value is %A" n
| None -> printfn "sorry, no value"
type MyClass() =
member this.PrintValue(?value:int) =
match value with
| Some(n) -> printfn "value is %A" n
| None -> printfn "sorry, no value"
the C# code invoke the F# code is like:
static void Main(string[] args)
{
var myValue = new MyClassNamespace.MyClass();
myValue.PrintValue(Microsoft.FSharp.Core.FSharpOption< int >.None);
myValue.PrintValue(new Microsoft.FSharp.Core.FSharpOption< int >(1));
}
{
var myValue = new MyClassNamespace.MyClass();
myValue.PrintValue(Microsoft.FSharp.Core.FSharpOption< int >.None);
myValue.PrintValue(new Microsoft.FSharp.Core.FSharpOption< int >(1));
}
The C# side code is not that nice.
If you prefer the C# side does not need to reference to FSharp.Core.dll. The the Optional and DefaultParameterValue is your friend. :)
namespace MyClassNamespace
open System.Runtime.InteropServices
type MyClass() =
member this.PrintValue(?value:int) =
match value with
| Some(n) -> printfn "value is %A" n
| None -> printfn "sorry, no value"
member this.PrintValue2([< Optional;DefaultParameterValue(0) >]value:int,
[< Optional;DefaultParameterValue(null) >]str:string) =
let defaultStr = if str = null then "null value" else str
printfn "(%A, %A)" value defaultStr
open System.Runtime.InteropServices
type MyClass() =
member this.PrintValue(?value:int) =
match value with
| Some(n) -> printfn "value is %A" n
| None -> printfn "sorry, no value"
member this.PrintValue2([< Optional;DefaultParameterValue(0) >]value:int,
[< Optional;DefaultParameterValue(null) >]str:string) =
let defaultStr = if str = null then "null value" else str
printfn "(%A, %A)" value defaultStr
The F# side invoke C# optional code is fairly easy.
public class CSharpClass
{
public void MyMethod(int a = 11)
{
Console.WriteLine("a = {0}", a);
}
}
{
public void MyMethod(int a = 11)
{
Console.WriteLine("a = {0}", a);
}
}
let c = ConsoleApplication1.CSharpClass()
c.MyMethod()
c.MyMethod(100)
c.MyMethod(a=199)
c.MyMethod()
c.MyMethod(100)
c.MyMethod(a=199)
No comments:
Post a Comment