F#: реализация интерфейса с именем функции, совпадающим с ключевым словом begin.

Я пытаюсь реализовать интерфейс IVector, который является частью пространства имен Microsoft.VisualC.StlClr. Он имеет функцию-член begin(). Если я попытаюсь реализовать интерфейс, он жалуется на «неожиданное ключевое слово «начало» в выражении объекта».

Это потому, что begin является ключевым словом, и я не могу реализовать функцию-член с таким именем?

B.


person user466855    schedule 05.10.2010    source источник


Ответы (1)


вы можете попробовать обернуть его в обратные кавычки. Интерфейс IVector слишком велик, чтобы реализовать его в качестве образца, поэтому пример будет меньше — приведенный ниже код компилируется без каких-либо ошибок.

// C#
public interface ITest
{
    void begin();
}

// F#
type Test() = 
    interface UStatic.ITest with
        member this.``begin``() = ()
person desco    schedule 05.10.2010
comment
Придется ли вам тогда называть это Test.''begin'' каждый раз? (Используются кавычки, так как не могу решить, как избежать обратных кавычек) - person Lazarus; 05.10.2010
comment
@user: Да, вам придется заключать имя в обратные кавычки каждый раз, когда вы его используете. Возможно, будет хорошей идеей добавить дополнительный член к типу Test, который его вызывает и имеет более разумное имя. - person Tomas Petricek; 05.10.2010
comment
Еще один вопрос. Это моя реализация: член this.begin(value:byref‹Generic.ContainerRandomAccessIterator‹float››) = () Определение интерфейса таково: abstract end: :ContainerRandomAccessIterator‹'TValue› byref -> unit Я получаю сообщение об ошибке компиляции : элемент begin : value:byref‹Generic.ContainerRandomAccessIterator‹float›› -› модуль не имеет правильного типа для переопределения соответствующего абстрактного метода. - person user466855; 05.10.2010