私はC#でユニオン検索のデータ構造を実装しています。要素はElement内部クラスを拡張する必要がありますが、そのクラスのフィールドを外部世界に限定して保持したいと思います。しかし、彼らは直接的な外部階級に公衆である必要があります。 folloowingコードが原因「一貫性のないアクセス」にコンパイルされません。準プライベート内部クラス
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++;
}
}
}
私が望むものを達成するための方法はありますか、私は要素である公共の場でのフィールドを受け入れる必要がありますか?
[C#自身の内部でネストされたクラスから継承する]の可能な複製(http://stackoverflow.com/questions/2158975/c-sharp-inherit-from-nested-class-within-itself) – nawfal