Question

Compte tenu de la classe A, qui contient des ensembles de données brutes, et de la classe B, qui contient une version réorganisée (GUI prêt) de ces données, je voudrais faire les données brutes dans un visible B.

Il est clair que les données brutes en classe A est contenue dans les membres privés. Je voudrais faire que les données visibles dans B si l'utilisation de quelque chose qui ressemble à la méthode des classes d'ami C de.

Comment puis-je aborder ce sujet?

Merci.

Était-ce utile?

La solution

A strictement parler, vous ne pouvez pas définir une classe spécifique (ou liste des classes) que vous pouvez exposer les données. Vous pouvez cependant utiliser le modificateur d'accès internal au lieu de private, ce qui rend les membres disponibles à une classe dans le même ensemble.

Cela étant dit, vous devez fortement envisager d'exposer ces membres par des propriétés plutôt que les champs (ce qui est ce que je devine que vous avez l'intention de l'exposition). Faire cela permettra à la classe de définir exactement comment ces informations peuvent être exposés à d'autres classes et que - si quelque chose -. Devrait se produire quand une autre classe change les données

Autres conseils

Peut-être cela pourrait vous aider ..

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));
    }
}

Vous pouvez définir à la fois dans un ensemble et marquer les champs A comme « interne ».

Une approche plus OO est de fournir un ensemble de méthodes publiques A qui permettent l'accès aux données (ou un sous-ensemble des données), typiquement par l'intermédiaire de simples propriétés.

En fonction de votre structure, vous pourrez peut-être utiliser des classes partielles. Cela signifie que les données et l'interface utilisateur sont en fait à la fois dans la même classe, mais vous les avez dans les différents fichiers.

Si cela ne fonctionne pas pour vous, alors vous avez des variables internes scope comme une alternative ou travailler avec des données que l'interface représente d'une manière plus générique.

L'ancienne méthode (jeu de mots) serait de définir des fonctions simples GetValue () et SetValue () pour revenir cette valeur afin que ces valeurs deviendraient inaccessibles sans utilisation de ces fonctions, en C # ces fonctions sont membres prédéfinies appelées propriétés.

class TestMethod{ 
private int Secret;

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

L'autre méthode consiste à, comme d'autres l'ont dit avant moi, il suffit d'utiliser le modificateur internal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top