O que é um bom padrão de design em C # para classes que precisam fazer referência a outras classes?

Estou trabalhando em um problema de negócios no C # .NET. Eu tenho duas classes, denominadas C e W, que serão instanciadas independentemente em momentos diferentes.

Um objeto da classe C precisa conter referências a 0 ... n objetos da classe W, ou seja, um objeto C pode conter até n objetos.

Cada objeto W precisa conter uma referência a exatamente 1 objeto da classe C, ou seja, um objeto W está contido em um objeto C.

Um objeto da classe C geralmente é instanciado primeiro. Posteriormente, seu conteúdo W é descoberto e instanciado. Neste momento, preciso cruzar os objetos C e W entre si.

Qual é um bom padrão de design para isso? Na verdade, tenho casos em que tenho três ou quatro classes envolvidas, mas podemos falar sobre duas classes para simplificar.

Eu estava pensando em algo simples como:

class C
{
   public List<W> contentsW;

}

class W
{
  public C containerC;

}

Isso funcionará no momento, mas posso prever a necessidade de escrever uma quantidade razoável de código para acompanhar todas as referências e sua validade. Eu gostaria de implementar código no caminho para fazer atualizações rasas apenas do contêiner e atualizações profundas de todas as classes referenciadas. Existem outras abordagens e quais são suas vantagens?

Editar em 03/11: Obrigado a todos pelas boas respostas e boa discussão. Finalmente escolhi a resposta de jop porque ela se aproximava mais do que eu queria fazer, mas as outras respostas também ajudaram. Obrigado novamente!

questionAnswers(6)

yourAnswerToTheQuestion