Краткий обзор переопределения свойство только для чтения к свойству чтения/записи

Самые трудные ошибки, чтобы разыскать и зафиксировать являются теми, которые комбинируют все трудные случаи:

  • сообщаемый третьим лицом, но Вы не можете воспроизвести его при своих собственных условиях тестирования;
  • ошибка происходит редко и непредсказуемо (например, потому что она вызывается состоянием состязания);
  • ошибка находится во встроенной системе, и Вы не можете присоединить отладчик;
  • , когда Вы пытаетесь получить регистрирующуюся информацию, ошибка уходит;
  • ошибка находится в стороннем коде, таком как библиотека...
  • ..., к которому у Вас нет исходного кода, таким образом, необходимо работать с дизассемблированием только;
  • и ошибка в интерфейсе между несколькими аппаратными системами (например, ошибки сетевого протокола или ошибки конфликтной ситуации при обращении к шине).

я работал над ошибкой со всеми этими функциями на этой неделе. Было необходимо перепроектировать библиотеку для обнаружения то, что это составило; затем генерируйте гипотезы, о которых мчались два устройства; затем сделайте особенно оснащенные версии программы разработанными для вызова предполагавшегося состояния состязания; затем, после того как одна из гипотез была подтверждена, было возможно синхронизировать синхронизацию событий так, чтобы библиотека выиграла гонки 100% времени.

24
задан Coincoin 28 September 2009 в 21:04
поделиться

2 ответа

You can't do it directly, since you can't new and override with the same signature on the same type; there are two options - if you control the base class, add a second property:

public abstract class Base
{
    public int Property { get { return PropertyImpl; } }
    protected abstract int PropertyImpl {get;}
}
public class Derived : Base
{
    public new int Property {get;set;}
    protected override int PropertyImpl
    {
        get { return Property; }
    }
}

Else you can introduce an extra level in the class hierarchy:

public abstract class Base
{
    public abstract int Property { get; }
}
public abstract class SecondBase : Base
{
    public sealed override int Property
    {
        get { return PropertyImpl; }
    }
    protected abstract int PropertyImpl { get; }
}
public class Derived : SecondBase
{
    public new int Property { get; set; }

    protected override int PropertyImpl
    {
        get { return Property; }
    }
}
15
ответ дан 29 November 2019 в 00:22
поделиться

What about something like:

public abstract class Base
{
    public virtual int Property
    {
        get { return this.GetProperty(); }
        set { }
    }

    protected abstract int GetProperty();
}
2
ответ дан 29 November 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: