2011-07-23 3 views
3

Я экспериментировал с F # и хотел бы попробовать использовать его в проекте C# для определенных фрагментов кода, которые выиграют от языка.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 ")); 
    } 
} 

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

ответ

10

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

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

+0

Это имеет смысл. Изменение одного из имен только для файла. –

Смежные вопросы