半私人内在阶级

时间:2012-01-20 15:47:39

标签: c# visibility access-modifiers

我正在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公开中的字段吗?

1 个答案:

答案 0 :(得分:1)

不可能只将它们公开给外层。 问题是为什么你需要公开它们?如果您创建了库,则可以使用internal

相关问题