2 votes

Comment grouper des propriétés en c# ?

Je ne suis pas sûr d'avoir bien formulé ma question, mais c'est ce que j'essaie de faire.

Je suis en train d'écrire un cadre de test pour un programme qui prend un ensemble d'arguments. Je développe une classe publique pour traiter les opérations concernant ces args. Ainsi, l'utilisateur peut utiliser comme,

Load(SampleProgram.CommandArgs args)
{}

public class CommandArgs
{
    public string Arg1
    { 
        get; set;
    }

    public string Arg2
    { 
        get; set;
    }

    public string Arg3
    { 
        get; set;
    }

    public string Parsedvalue
    { 
        get; set;
    }

    //......and so on..
}

Mon problème est que dans ces args, Arg2 et Arg3 appartiennent à un type et l'utilisateur peut avoir besoin de les changer plus tard, même si le reste des args ne change pas. J'ai donc déplacé les arg2 et arg3 dans une classe séparée et je veux que la classe CommandArgs la réutilise. Comment faire ?

J'ai essayé ceci

public class CommandArgs
{
    private GroupedCommandArgs grpargs = null;

    public string Arg1
    { 
        get; set;
    }

    //......and so on..
}

//In constructor..
grpargs = new GroupedCommandArgs(arg2, arg3);

Ainsi, si l'utilisateur souhaite modifier arg2 il ou elle peut écrire,

CommandArgs.GroupedCommandArgs.arg2 = "something";

Mais ce dont j'ai également besoin, c'est qu'à chaque fois que arg2 ou arg3 je dois mettre à jour certaines propriétés telles que Parsedvalue .

Comment faire ? Mon code est en c#.

Gracias

1voto

Samuel Neff Points 35554

Utiliser l'héritage. Inclure les arguments communs dans la base CommandArgs et pour les cas avec des propriétés exctra, créer des sous-classes comme AdditionalCommandArgs .

class CommandArgs
{
    public string Arg1 { get; set; }

    public virtual string ParsedValue
    {
        get
        {
            return "Arg1: " + Arg1;
        }
    }
}

class AdditionalCommandArgs : CommandArgs
{
    public string Arg2 { get; set; }

    public string Arg3 { get; set; }

    public override string ParsedValue
    {
        get
        {
            return base.ParsedValue + "\r\n" +
                   "Arg2: " + Arg2 + "\r\n" +
                   "Arg3: " + Arg3;
        }
    }
}

0voto

CC. Points 1186

Si la principale chose que vous souhaitez est de permettre à votre code d'intercepter le changement de valeur de Arg2, Arg3, etc., et de déclencher ensuite une modification d'un différents vous voudrez probablement mettre en œuvre la propriété INotifyPropertyChanged

Consultez l'exemple ici : http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.propertychanged.aspx

Ensuite, dans votre propre méthode NotifyPropertyChanged, assurez-vous de mettre à jour Parsedvalue comme vous le souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X