Masquer les membres hérités

Je cherche un moyen de masquer efficacement les membres hérités. J'ai une bibliothèque de classes qui héritent des classes de base communes. Certaines des classes descendantes les plus récentes héritent de propriétés de dépendance qui sont devenues résiduelles et peuvent être un peu déroutantes lors de l'utilisation d'IntelliSense ou de l'utilisation des classes dans un concepteur visuel.

Ces classes sont toutes des contrôles écrits pour être compilés pour WPF ou Silverlight 2.0. Je connais ICustomTypeDescriptor et ICustomPropertyProvider, mais je suis presque certain qu'ils ne peuvent pas être utilisés dans Silverlight.

Ce n'est pas tant un problème fonctionnel qu'un problème d'utilisabilité. Que dois-je faire ?

Mettre à jour

Certaines des propriétés que j'aimerais vraiment cacher proviennent d'ancêtres qui ne sont pas les miens et à cause d'un outil spécifique pour lequel je suis en train de concevoir, je ne peux pas masquer les membres avec le 3 opérateur. (je sais, c'est ridicule)

请先 登录 后评论

2 réponses

Karl Seguin

Je pense que la meilleure façon de faire est de considérer la composition plutôt que l'héritage.

Ou, vous pouvez créer une interface qui a les membres que vous voulez, faire implémenter cette interface par votre classe dérivée et programmer sur l'interface.

请先 登录 后评论
Mike Stone

Une chose que vous pouvez faire est de contenir l'objet plutôt que de l'étendre à partir de l'autre classe. Cela vous donnera le plus de flexibilité en termes d'exposition de ce que vous voulez exposer, mais si vous avez absolument besoin que l'objet soit de ce type, ce n'est pas la solution idéale (cependant, vous pouvez exposer l'objet à partir d'un getter).

Ainsi :

public class MyClass : BaseClass
{
    // Your stuff here
}

Devient :

public class MyClass
{
    private BaseClass baseClass;

    public void ExposeThisMethod()
    {
        baseClass.ExposeThisMethod();
    }
}

Ou :

public class MyClass
{
    private BaseClass baseClass;

    public BaseClass BaseClass
    {
        get
        {
            return baseClass;
        }
    }
}
请先 登录 后评论
  • 23 abonnés
  • 0 favoris,444 Feuilleter
  • MojoFilter posée à 2023-03-02 20:02