How to use C# object from F#?

后端 未结 3 1002
温柔的废话
温柔的废话 2020-12-11 00:37

I have the following C# code.

namespace MyMath {
    public class Arith {
        public Arith() {}
        public int Add(int x, int y) {
            return         


        
相关标签:
3条回答
  • 2020-12-11 01:13

    Since Arith is a class and not a namespace, you can't open it. You can do this instead:

    open MyMath
    let x = Arith().Add(10,20)
    
    0 讨论(0)
  • 2020-12-11 01:26

    try

    open MyMath
    let arith = Arith() // create instance of Arith
    let x = arith.Add(10, 20) // call method Add
    

    Arith in your code is class name, you cannot open it like namespace. Possibly you are confused with ability to open F# modules so its functions can be used without qualification

    0 讨论(0)
  • 2020-12-11 01:27

    With open, you can only open namespaces are modules (similarly to the C# using keyword). Namespaces are defined with the namespace keyword, and act the same in both C# and F#. However, modules are in fact just static classes, having only static members - F# just hides that from you.

    If you look at an F# code with the reflector, you'll see that your module has been compiled as a static class. For this reason you can only use static classes as modules in F#, and in your example, the class is not static, so in order to use it, you have to create an object instance - just like you'd do in C#.

    0 讨论(0)
提交回复
热议问题