1 votes

Etendre les WebControls ASP.NET : Comment masquer efficacement les propriétés publiques

Je suis en train d'étendre le contrôle Web TextBox pour fonctionner comme une sorte de "DateTextBox" qui expose sa valeur en tant que propriété (DateValue) dans le code-behind:

public sealed class DateTextBox : TextBox
{
    public DateTime ?DateValue
    {
        /* ToDateFromUserInterface() et ToUserInterfaceString() sont tous deux
           des méthodes d'extension */

        get
        {
            return
            (
                String.IsNullOrEmpty(Text) ?
                new DateTime?() :
                Text.ToDateFromUserInterface()
            );
        }

        set
        {
            if (value != null) Text = ((DateTime)value).ToUserInterfaceString();
        }
    }
}

Étant donné que ce contrôle est censé être utilisé uniquement avec des dates, il n'y a aucune raison pour lui d'hériter de la propriété Text de son parent.

Y a-t-il un moyen de le masquer?.. Autre que d'implémenter une NotImplementedException, comme ceci:

new public String Text
{
    get { throw new NotImplementedException(); }
    set { throw new NotImplementedException(); }
}

4voto

Joel Martinez Points 22924

Il suffit de le remplacer et de fournir une version sous forme de chaîne de la date. Chaque fois que vous héritez d'une classe de base, il est généralement une mauvaise idée d'essayer de modifier l'interface existante de cette manière... cela va à l'encontre de toutes les pratiques orientées objet :-P

2voto

Alex Reitbort Points 9120

Vous pouvez utiliser l'attribut EditorBrowsable. Il masquera uniquement la propriété d'Intelisense, mais ne rompra pas la compatibilité au moment de la compilation avec la classe de base.

Vous pouvez toujours utiliser la propriété si vous connaissez son nom.

PS : Lisez les commentaires des utilisateurs à la fin de cet article. http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx

1voto

Karmic Coder Points 4501

Si vous créez une classe qui hérite d'une autre classe, toutes les propriétés de la méthode parente devraient toujours être pertinentes. Dans ce cas, vous pourriez renvoyer une représentation textuelle de la date pour le get, et analyser une représentation textuelle pour le set.

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