Пространства имен F # / Модули и взаимодействие с C # - PullRequest
3 голосов
/ 23 июля 2011

Я экспериментировал с F # и хотел бы попробовать использовать его в проекте C # для определенных фрагментов кода, которые могли бы получить пользу от языка.

Я пытался выяснить, как модулиПространства имен работают при использовании в проекте C #.Например, следующий код:

namespace File1
#light

type File1(path : string) =
    static member Trim(p : string) = p.Trim()
    member self.Path = path

Затем я пытаюсь использовать это в C #, говоря:

using File1;

class Program
{
    static void Main(string[] args)
    {
        // Doesn't work
        Console.WriteLine(File1.Trim(" hello "));
        // Does work
        Console.WriteLine(File1.File1.Trim(" hello "));
    }
}

Я понимаю, почему работает второй, но почему нетпервая работа?Я добавил пространство имен с помощью объявления, и File1 должен быть классом.Trim является статическим членом этого класса.

1 Ответ

10 голосов
/ 23 июля 2011

Это не связано с тем, как пространства имен и классы ведут себя в F #, вы правильно поняли.

Проблема в том, что у вас есть пространство имен с именем File1 и класс с именем File1.Когда вы пишете File1 в своей программе на C #, даже если у вас есть правильный using, это означает «пространство имен File1», а не «класс File1.File1».Если, например, вы изменили имя своего пространства имен на FileNamespace и имя type на FileType, все будет работать так, как ожидается.(Я не говорю, что вы должны использовать такие названия в вашем настоящем проекте.)

...