#.net #f# #c#-to-f#
#.net #f# #c #-to-f#
Вопрос:
Я пытаюсь выполнить следующий эквивалент F #:
[C#]
public virtual int Property { get; set; }
Но этот код (и многие другие комбинации) не работает:
[F#]
abstract member Id: int with get, set
default val this.Id = 123 with get, set
Комментарии:
1. ну, ваш первый пример (C #) не является абстрактным автоматическим свойством… Это виртуальное автоматическое свойство
2. Почему вы пытаетесь сделать его абстрактным — это не то, что делает код C #. Существует большая разница между виртуальным и абстрактным.
3. В F # ключевые слова abstract default используются для получения того же результата, что и в C # virtual.
4.Пример (с задним полем):
[<DefaultValue>] val mutable private name: string
abstract member Name:string with get, set
default this.Name with get() = this.name and set v = this.name <- v
Ответ №1:
Это невозможно в предварительном просмотре Dev11.
Ответ №2:
Хорошо, просматривая документацию MSDN по свойствам F #, эта строка в абстрактных свойствах сразу выскакивает:
В качестве альтернативы, abstract может просто означать, что свойство является виртуальным, и в этом случае определение должно присутствовать в том же классе.
Пример синтаксиса, который они дают, таков:
type Base1() =
let mutable value = 10
abstract Property1 : int with get, set
default this.Property1 with get() = value and set(v : int) = value <- v
Теперь я не слишком хорошо знаком с F #, но я предполагаю, что вы могли бы установить let mutable value = 10
в соответствии с вашими требованиями let mutable value = 123
Комментарии:
1. Спасибо за вашу помощь, но это не автоматически реализуемое свойство. Я стараюсь не использовать поле поддержки.
2. Автоматически реализованное свойство — это новая функция (F # 3.0)
3. Ах, это правда. Прочитав документацию и то, как она структурирована, я не уверен, что это возможно (поскольку ваш код кажется наиболее вероятным способом сделать это)