There's a bunch of nodes in 3D space:
public class Node {
public Vector3 Position;
public Vector3 Size;
}
Then, there are Path
objects which contain an array of nodes. A node can belong to multiple paths. A path has some metadata associated with each of its nodes. The problem is, a path's nodes should be publicly accessible but the associated metadata should stay private.
Unsatisfactory solutions:
Two arrays, a public one for nodes and a private one for metadata, associated by index. Synchronization issues.
A public wrapper type to couple a node with metadata. Doesn't keep the metadata private.
What's a better way to associate private data with array elements?
The idea came from nmclean's answer and comments – a nested wrapper type.
public class Path {
// wraps a node and its metadata
private class NodeData {
// public members visible only to parent class
public Node Node;
public float SomeMetadata;
}
// private array...
private NodeData[] nodeData;
// ...public method
public Node GetNode(int index) {
return nodeData[index].Node;
}
}