Предположим, у меня есть пара явно искусственных классов C #, таких как:
public abstract class Foo {
public abstract int[] LegalValues { get; }
public virtual bool IsValueLegal(int val) {
return Array.IndexOf(LegalValues, val) >= 0;
}
}
и это:
public class Bar : Foo {
static int[] _legalValues = new int[] { 0, 1 }; // whatever
public sealed override int[] LegalValues
{ get { return _legalValues; } }
public sealed override bool IsValueLegal(int val)
{ return base.IsValueLegal(val); }
}
Как мне это сделать в F #?Очевидный код для свойств:
[<Sealed>]
override this.LegalValues with get() = // ...
[<Sealed>]
override this.IsValueLegal value = // ...
Вызывает ошибку, потому что SealedAttribute, очевидно, не может быть применен к элементам.Я, конечно, могу запечатать весь класс и тем самым запечатать всех членов, но (и это действительно важно , но) заключается в том, что у меня есть цель сопоставить существующую сигнатуру класса точно а базовый класс имеет другие виртуальные / абстрактные члены, которые в идеале должны оставаться переопределенными.