半私人内部阶级
本文关键字:内部 | 更新日期: 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
。