Je souhaite définir un type spécial de bouton qui n'autorise que deux libellés possibles: "ON" et "OFF". J'ai décidé d'hériter d'un Windows.Forms.Button pour l'implémenter mais maintenant je ne sais pas comment appliquer cette règle. Dois-je juste remplacer la propriété Text comme ça?Encapsulation d'un Windows.Forms.Button
public override string Text
{
set
{
throw new InvalidOperationException("Invalid operation on StartStopButton!");
}
}
Le problème que je vois avec ceci est que je brise le contrat que tous les boutons devraient avoir. Si un code essaie quelque chose comme
foreach (Button button in myForm) {
button.Text = "123";
}
ils auront une exception si j'ai un de mes boutons spéciaux sur la forme, ce qui est quelque chose qui ne expectable. Tout d'abord, parce que les gens considèrent les propriétés comme des variables «publiques», et non comme des méthodes, parce qu'elles sont habituées à utiliser et à définir ce qu'elles veulent sur les boutons sans avoir à se soucier des exceptions.
Devrais-je simplement faire en sorte que la propriété set ne fasse rien? Cela pourrait conduire à des résultats difficiles:
myButton.Text = "abc";
MessageBox.Show(abc); //not "abc"!
L'idée générale du monde OO est dans ce genre de cas utiliser la composition au lieu de l'héritage. Mais pour que le bouton "vive" sur un formulaire, il doit hériter d'une classe spéciale. J'ai regardé Control, mais il semble que la propriété Text soit déjà définie. Je suppose que la situation idéale serait d'hériter d'une sorte de classe qui n'aurait même pas la propriété Text définie, mais qui aurait des propriétés de position, de taille, etc. En haut de la hiérarchie, après le contrôle, nous avons Component, mais cela ressemble à une classe vraiment brute.
Des indices sur la façon d'y parvenir? Je sais que ce fut un long message :(
Merci
Cela ne semble pas être une bonne idée. Vous devez toujours remplacer le mutateur de Text et le faire ne rien faire. –
True. Mais quand j'y ai réfléchi pendant un moment, je ne pensais pas que cela risquait de poser un problème, car toute personne qui utilise votre butin personnalisé saura exactement ce qu'elle fait et ne voudra pas que le texte soit autre chose que Allumé ou éteint. –