Одним из способов было бы иметь массив для каждого объекта, содержащий указатели на другие объекты, либо через словарь, который хранит объект как ключ и дату как значение (или собственный класс свойств для любого количества свойств), либо используя обертки вокруг объекта и простой список, эта оболочка должна затем реализовать шаблон декоратора, чтобы обеспечить прямой доступ к объекту вместе с любыми уникальными свойствами.
Объект-обертка может использовать внутренний объект для свойств, которые совместно используются между оберточными объектами-опорами для двух разных объектов, так что любое свойство синхронизируется.
Другим способом может быть отдельный список пар, в которых один обернут, как указано выше.
Позже упрощается переключение по всем объектам.
Вот пример кода, это может быть не совсем то, что вам нужно, но оно может дать вам основы моей идеи.
void Main()
{
var p = new Player("David");
var c = new Championship("Chess");
p.LinkChampionship(c, DateTime.Now);
p.Dump();
}
// Define other methods and classes here
class Player : Properties {
public virtual String Name {get; set;}
public List<ChampionshipWrapper> champs = new List<ChampionshipWrapper>();
public Player() {
}
public Player(string name) {
Name = name;
}
public void LinkChampionship(Championship champ, DateTime when) {
var p = new Properties(when);
champs.Add(new ChampionshipWrapper(champ, p));
champ.players.Add(new PlayerWrapper(this, p));
}
}
class Championship : Properties {
public virtual String Name { get; set; }
public List<PlayerWrapper> players = new List<PlayerWrapper>();
public Championship(){}
public Championship(string name) {
Name = name;
}
public void LinkPlayer(Player play, DateTime when) {
var p = new Properties(when);
players.Add(new PlayerWrapper(play, p));
play.champs.Add(new ChampionshipWrapper(this, p));
}
}
class Properties {
public virtual DateTime LastPlayed { get; set; }
public Properties() {
}
public Properties(DateTime when) {
LastPlayed = when;
}
}
class PlayerWrapper : Player {
private Player player;
private Properties props;
public PlayerWrapper(Player play, Properties prop) {
this.player = play;
this.props = prop;
}
public override String Name {
get { return this.player.Name; }
set { this.player.Name = value; }
}
public override DateTime LastPlayed {
get { return this.props.LastPlayed; }
set { this.props.LastPlayed = value; }
}
}
class ChampionshipWrapper : Championship {
private Championship champ;
private Properties props;
public ChampionshipWrapper(Championship c, Properties prop) {
this.champ = c;
this.props = prop;
}
public override String Name {
get { return this.champ.Name; }
set { this.champ.Name = value; }
}
public override DateTime LastPlayed {
get { return this.props.LastPlayed; }
set { this.props.LastPlayed = value; }
}
}
Является ли данная дата собственностью чемпионата или участника? Итак: в последний раз, когда кто-то играл, или в последний раз, когда был проведен чемпионат (например, годовое событие) – Marnix
, предположим, что это свойство участника, но это действительно не относится к примеру, свойство может быть с обеих сторон –