olução para um caso de uso de classes de amigos em C #

Considere o seguinte padrão de código:

// Each foo keeps a reference to its manager
class Foo
{
    private FooManager m_manager;
}

// Manager keeps a list of all foos
class FooManager
{
    private List<Foo> m_foos;
}

Problema: não há como criar um novo Foo e atualizar a lista m_foos no FooManager, e a referência m_manager na nova instância do Foo sem expor algumas privações publicamente (e correndo o risco de alguém dessincronizar a lista com os Foos reais

Por exemplo. pode-se implementar um construtor Foo (gerente FooManager) no Foo. Ele pode definir a referência do m_manager, mas não tem como acessar a lista m_foos. Ou você pode implementar o método CreateFoo () no gerenciador. Ele pode acessar a lista m_foos, mas não tem como definir m_manager no Foo.

No C ++, seria óbvio que o FooManager seria amigo do Foo para expressar a intenção do projeto, mas isso não é possível em C #. Também sei que eu poderia fazer do Foo uma classe interna do FooManager para obter acesso, mas isso também não é uma solução (e se o Foo pudesse pertencer a mais de uma classe de gerente?)

Btw. Conheço o acesso "interno" no .NET, mas exige que o Foo e o FooManager morem sozinhos em um assembly separado, o que não é aceitáve

Alguma solução alternativa para isso sem tornar públicas as coisas privadas?

questionAnswers(7)

yourAnswerToTheQuestion