Você pode usar a abordagem de tornar o construtor de A protegido, o construtor de B privado e, em seguida, criar um auxiliar estático de classe para instanciar B; o ajudante estático faria então a inicialização de dois estágios; Isso garantiria que a instanciação seja sempre feita corretamente e tornar o construtor privado / protegido garante que você não tente instanciar a classe acidentalmente diretamente. Isso tem a desvantagem de não ser possível instanciar a classe na pilha ou como um membro - ela precisa estar na pilha.