Как использовать объект С# из F #?
У меня есть следующий код С#.
namespace MyMath {
public class Arith {
public Arith() {}
public int Add(int x, int y) {
return x + y;
}
}
}
И я придумал код F # с именем testcs.fs, чтобы использовать этот объект.
open MyMath.Arith
let x = Add(10,20)
Когда я запускаю следующую команду
fsc -r:MyMath.dll testcs.fs
Я получил это сообщение об ошибке.
/Users/smcho/Desktop/cs/namespace/testcs.fs(1,13): error FS0039: The namespace 'Arith' is
not defined
/Users/smcho/Desktop/cs/namespace/testcs.fs(3,9): error FS0039: The value or constructor
'Add' is not defined
Что может быть неправильным? Я использовал mono для среды .NET.
Ответы
Ответ 1
попробовать
open MyMath
let arith = Arith() // create instance of Arith
let x = arith.Add(10, 20) // call method Add
Ариф в вашем коде - это имя класса, вы не можете его открыть, как пространство имен. Возможно, вас путают с возможностью открытия модулей F #, поэтому его функции можно использовать без квалификации
Ответ 2
Так как Arith
- это класс, а не пространство имен, его нельзя открыть. Вы можете сделать это вместо:
open MyMath
let x = Arith().Add(10,20)
Ответ 3
С помощью open вы можете открывать пространства имен только как модули (аналогично ключевому слову С#).
Пространства имен определяются с помощью ключевого слова namespace и действуют одинаково как на С#, так и на F #. Тем не менее, модули на самом деле являются просто статическими классами, имеющими только статические члены - F # просто скрывает это от вас.
Если вы посмотрите на код F # с отражателем, вы увидите, что ваш модуль был скомпилирован как статический класс.
По этой причине вы можете использовать только статические классы как модули в F #, а в вашем примере класс не является статичным, поэтому для его использования вам необходимо создать экземпляр объекта, как и в С#.