Pergunta

Dada a classe A, que contém conjuntos de dados brutos, e a classe B, que contém uma versão reorganizada (pronta para GUI) desses dados, gostaria de tornar os dados brutos em A visíveis em B.

É evidente que os dados brutos da classe A estão contidos em membros privados.Eu gostaria de tornar esses dados visíveis em B através do uso de algo semelhante ao método de classes amigas C++.

Como posso abordar isso?

Obrigado.

Foi útil?

Solução

Estritamente falando, você não pode definir uma classe (ou lista de classes) específica para a qual possa expor os dados. Você pode, no entanto, usar o internal Modificador de acesso em vez de private, que disponibiliza os membros a qualquer classe na mesma montagem.

Dito isto, você deveria fortemente Considere expor esses membros por meio de propriedades, em vez de campos (que é o que acho que você está planejando expor). Fazer isso permitirá que a classe defina exatamente como essas informações podem ser expostas a outras classes e o quê-se qualquer coisa-deverá acontecer quando outra classe altera os dados.

Outras dicas

Pode ser isso pode ajudá -lo ..

public class A
{
    public A() { }

    public string AccessData(object accessor)
    {
        if (accessor is B)
            return "private_data";
        else
            throw new UnauthorizedAccessException();
    }
}

public class B
{
    public B() { }

    private void AccessDataFromA()
    {
        Console.WriteLine(new A().AccessData(this));
    }
}

Você pode definir ambos em uma montagem e marcar os campos em um "interno".

Uma abordagem mais OO é fornecer um conjunto de métodos públicos em A que permitem acesso aos dados (ou um subconjunto dos dados), normalmente por meio de propriedades simples.

Dependendo da sua estrutura, você poderá usar classes Partial.Isso significaria que os dados e a interface do usuário estão, na verdade, na mesma classe, mas você os possui em arquivos diferentes.

Se isso não funcionar para você, então você tem variáveis ​​​​de escopo interno como alternativa ou trabalha com conjuntos de dados que a IU representa de maneira mais genérica.

O método antigo (trocadilho pretendido) seria definir simples Obter valor() e setValue () Funções para retornar esse valor para que esses valores se tornassem inacessíveis sem o uso dessas funções, em C# essas funções são membros predefinidos chamados propriedades.

class TestMethod{ 
private int Secret;

get { return Secret;}
set { Secret = value;}
}

O outro método é, como outros declararam diante de mim, basta usar o internal modificador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top