Как и все остальные, используйте свойства вместо полей, но вы можете сделать что-то вроде того, что я интерпретировал в комментариях для членов только для чтения:
abstract public class Base
{
abstract public string Foo { get; }
abstract public string Bar { get; }
abstract public string Baz { get; }
}
public class Derived : Base
{
public override string Foo { get { return "foo"; } }
public override string Bar { get { return "bar"; } }
public override string Baz { get { return "baz"; } }
}
Если вы хотите, чтобы поля были модифицируемымипозже вам придется либо использовать автоматические свойства , либо объявить конкретные вспомогательные поля и пары getter / setter для каждого свойства.