Я бы смоделировал это с помощью абстрактного / виртуального свойства в C #.
abstract class Super {
protected abstract int Field { get; }
}
class Sub : Super {
protected override int Field { get { return 5; } }
}
На мой взгляд, это лучшее решение, чем иметь конструктор, который включает каждое поле только для чтения в качестве параметра.Во-первых, потому что компилятор также может это встроить, а также потому, что решение конструктора будет выглядеть следующим образом в производном классе:
class Sub : Super {
public Sub() : base(5) { } // 5 what ?? -> need to check definition of super class constructor
}
Также это может не сработать, если у вас уже есть конструктор, который принимаетзначение типа int.