Je souhaite laisser un utilisateur spécifier une couleur personnalisée pour une classe dans le constructeur en transmettant des octets RGBA. Si elles ne spécifient pas de couleur personnalisée, une couleur par défaut des paramètres de l'application sera utilisée. Si l'Alpha est omis, cependant, supposer complètement opaque.Vérifiez si l'argument d'octet optionnel a été passé en
Ce que je voudrais:
public MyClass(byte r_col = -1, byte g_col = -1, byte b_col = -1, byte a_col = 255)
{
if (r_col == -1 | g_col == -1 | b_col == -1)
{
// use default color
}
else
{
this.color = System.Windows.Media.Color.FromArgb(a_col, r_col, g_col, b_col);
}
}
Cependant, il n'y a pas de valeur « mal » pour un octet (-1 est invalide), donc je suis incapable de détecter si un octet réellement passé dans la fonction . Quelles options ai-je? Je voudrais éviter la surcharge de fonction si possible.
En fait, il s'agit d'une mauvaise conception d'API, car vous autorisez l'appelant à transmettre certaines valeurs qui seront ignorées. Par exemple. que se passera-t-il si l'appelant ne passe que R et G? Ils ne devraient être autorisés à passer rien, RVB ou RVBA, et pour cela vous avez besoin de surcharges –
Bon point - pour l'instant il utilise la couleur par défaut (et ne donne aucune erreur). Je suppose que la surcharge serait la méthode la plus complète ici. – Michael