半私人内部阶级

本文关键字:内部 | 更新日期: 2023-09-27 18:20:58

我正在C#中实现一个并集查找数据结构。元素必须扩展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中的字段是公开的?

半私人内部阶级

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