我正在C#中实现union-find数据结构。元素必须扩展Element内部类,但我想将该类中的字段保持为外部世界的私有。然而,他们需要向外部直接上层公开。由于“不一致的可访问性”,下面的代码无法编译:
class DisjointSetForrests<T> where T : DisjointSetForrests<T>.Element {
private class PrivateElement {
public Element p;
public int rank;
}
public class Element : PrivateElement {
}
public void MakeSet(T x) {
x.p = x;
x.rank = 0;
}
public T FindSet(T x) {
if (x != x.p) x.p = FindSet(x);
return (T)x.p;
}
public void Union(T x, T y) {
Link(FindSet(x), FindSet(y));
}
public void Link(T x, T y) {
if (x.rank > y.rank) {
y.p = x;
} else {
x.p = y;
if (x.rank == y.rank) y.rank++;
}
}
}
有没有办法实现我想要的,或者我应该接受Element公开中的字段吗?
答案 0 :(得分:1)
不可能只将它们公开给外层。
问题是为什么你需要公开它们?如果您创建了库,则可以使用internal
。