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?