2009-06-03 12 views
1

J'ai une classe avec peu de propriétés A, B, C. Je considère cela comme un objet d'entrée car je l'utilise dans la logique pour exécuter certaines règles basées sur les valeurs de ces propriétés. Maintenant, après avoir exécuté les règles, j'ai créé une autre classe comme une sortie avec les mêmes propriétés et avec les mêmes valeurs en plus de quelques autres propriétés spécifiques à la sortie. Maintenant, ma question est de savoir comment partager ces propriétés (A, B, C) entre les classes d'entrée et de sortie sans avoir à affecter manuellement la valeur de l'entrée à la sortie. Pouvez-vous me suggérer un design efficace que je dois utiliser? Est-ce que le concept de classe abstraite entre en scène ici? Ou y a-t-il un autre moyen efficace?Partager des propriétés entre plusieurs classes

Répondre

0

Utilisez une classe intermédiaire qui n'a que les propriétés, puis accédez à l'instance de cette classe à partir de vos objets d'entrée et de sortie, mais dans la plupart des cas, il serait plus simple de copier les valeurs de votre entrée.

0

Avez-vous envisagé d'utiliser le motif de conception singleton? Je ne suis pas familier avec la spécification de votre projet, mais il semble que cela puisse vous aider ou au moins vous guider.

0

Vous pouvez définir un opérateur implicite (C#) sur la classe de sortie comme ceci:

public static implicit operator OutputClass(InputClass m) 
{ 
    this.A = m.A; 
    this.B = m.B; 
    this.C = m.C; 
} 

Alors tout ce que vous avez à faire est:

output = input; 

et vous serait effectivement apporter plus de tous les données de l'entrée que vous voulez dans la sortie.

0

Options - singleton - fonctionne mais dépend des scénarios de réutilisation. Utilisez-vous un type d'usine ou un modèle d'instance autre que "new MyObj()"? si c'est le cas, l'usine peut faire le travail - ce qui conduit à la méthode suivante - injection. Est-ce que votre langue prend en charge l'injection ou une sorte (aka - printemps). Vous pouvez définir une méthode setter, mais laisser le cadre d'injection et/ou les méthodes d'usine pour gérer/faire l'installation - dépend encore une fois des cas d'utilisation. Si son runtime est basé, vous devrez utiliser la fonction -delate pour faire référence aux objets d'origine ou à un objet intermédiaire (qui enveloppe à son tour A, B C etc.).

Probablement un peu à gauche du champ, mais je suppose que votre question est un cas simple juste pour obtenir quelques suggestions pour un plus gros problème.

Les propriétés sont-elles dynamiques - temps de compilation vs temps d'exécution? vont-ils changer (c'est-à-dire gérer les mises à jour dynamiques à partir d'un db). Avez-vous besoin de courir dans un harnais de test ou avec des valeurs fictives et ensuite tester dans le contexte de l'application complète?

0

Sans savoir plus, je pense que l'héritage et polimorphism est la voie à suivre:

class input 
{ 
    public int A { get; set;} 
    public int B { get; set;} 
    public int C { get; set;} 
} 

class output : input { 
    public int D { get; set;} 
    public int E { get; set;} 
    public int F { get; set;} 
} 

Le vous ne simple:

void main() 
{ 
    output tpt = new output(); 
    tpt.A = 3; 
    tpt.B = 2; 
    tpt.C = 4; 

    tpt = dosomething((input)tpt); 
} 

public output dosomething(input inpt) 
{ 
    //blablabla 
    output tpt = (output)inpt; 
    tpt.D = 1; 
    tpt.E = 2; 
    tpt.F = 3; 

    return tpt; 
} 
Questions connexes