我一直在环顾四周,到目前为止还没有找到一个好的方法来做到这一点。这是一个普遍的问题,我敢肯定。
假设我有以下内容:
class SomeClass : IComparable
{
private int myVal;
public int MyVal
{
get { return myVal; }
set { myVal = value; }
}
public int CompareTo(object other) { /* implementation here */ }
}
class SortedCollection<T>
{
private T[] data;
public T Top { get { return data[0]; } }
/* rest of implementation here */
}
想法是,我要实现一个二进制堆,而不是只支持 Insert() 和 DeleteMin() 操作,我想支持“偷看”最高(或最低,视情况而定)优先级值在堆栈上。从来没有像海森堡那样,整个“你不能在不改变它们的情况下看待事物”不确定性原则。垃圾!
显然,问题在于上述方法无法阻止调用代码通过 Top 属性修改 MyVal(假设为 SortedCollection),该操作很可能会将我的堆置于错误的顺序。有什么方法可以防止修改通过 Top 属性应用于堆的内部元素?还是我只是使用带有警告的代码:“只有在插入和出列之间不修改任何实例时才稳定。YMMV。”