Самые трудные ошибки, чтобы разыскать и зафиксировать являются теми, которые комбинируют все трудные случаи:
я работал над ошибкой со всеми этими функциями на этой неделе. Было необходимо перепроектировать библиотеку для обнаружения то, что это составило; затем генерируйте гипотезы, о которых мчались два устройства; затем сделайте особенно оснащенные версии программы разработанными для вызова предполагавшегося состояния состязания; затем, после того как одна из гипотез была подтверждена, было возможно синхронизировать синхронизацию событий так, чтобы библиотека выиграла гонки 100% времени.
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; }
}
}
What about something like:
public abstract class Base
{
public virtual int Property
{
get { return this.GetProperty(); }
set { }
}
protected abstract int GetProperty();
}