Здравствуйте.
Проблема такого рода: нужно вынести некоторую функциональность, реализованныю на C# в dll на F#. Так как я на F# нигда не писал, возникают проблемы, на которые я ответа пока не нашёл. Например, исходный класс (BraceMatchingTagger описан в другой части файла):
| Код | namespace MyCompany.VSYard.BraceMatching { using System; using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Classification; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.Text.Tagging; using Microsoft.VisualStudio.Utilities; using System.Linq;
[Export(typeof(IViewTaggerProvider))] [ContentType("text")] [TagType(typeof(TextMarkerTag))] internal class BraceMatchingTaggerProvider : IViewTaggerProvider { public ITagger<T> CreateTagger<T>(ITextView textView, ITextBuffer buffer) where T : ITag { return new BraceMatchingTagger(textView, buffer) as ITagger<T>; } } }
|
То, что я написал (не работает, конечно):
| Код | type internal BraceMatchingTaggerProvider<'T> = class interface IViewTaggerProvider with member self.CreateTagger<'T> (textView : ITextView, buffer : ITextBuffer) = new BraceMatchingTagger(textView, buffer) end
|
Собственно, вопросы:- Мне нужны некоторые системные библиотеки, типа using Microsoft.VisualStudio.Text.Tagging, но я их упорно не могу достать (в GUI не видны, через автодополнение в коде --- тоже). Я чего-то не понимиаю. Как это нужно делать?
- То, что в исходном коде было на подобии ITagger<T>, как перенести в F# правильно? Как я перенес, видно в коде, но я почти уверен, что надо не так. При этом не понимаю, почему без апостровфа перед Т F# недоволен.
- Правильно ли перенесен мной интерфейс?
- Не докнца понял, почему студия захотела class ... end (потому что не указан конструктор?).
Буду очень благодарен, если кто-нибудь просветит меня в этих вопросах и сможет дать советы. Спасибо. |