Est-il possible de cacher le constructeur parameterless d'un utilisateur en C#cacher constructeur sur struct
Je veux les forcer à utiliser toujours le constructeur avec des paramètres
par exemple cette classe de position
public struct Position
{
private readonly int _xposn;
private readonly int _yposn;
public int Xposn
{
get { return _xposn; }
}
public int Yposn
{
get { return _yposn; }
}
public Position(int xposn, int yposn)
{
_xposn = xposn;
_yposn = yposn;
}
}
Je veux que les utilisateurs soient en mesure de nouveau une position en spécifiant les coordonnées x et y
Cependant, le constructeur parameterless est toujours availiable
Je ne peux pas le rendre privé . Ou même définir comme du public
J'ai lu ce Why can't I define a default constructor for a struct in .NET?
mais il ne marche pas vraiment aider
Si cela est impossible - quelle est la meilleure façon de détecter si la position que je suis être passé a valeurs?
Vérification de l'appartenance à chaque champ de propriété? Y a-t-il un moyen plus lisse?
grâce
Je vois cela comme un problème d'utilisabilité plus que toute autre chose. Le constructeur par défaut peut créer un objet _valid_, mais pour beaucoup de structures, ce ne sera pas ce que l'utilisateur voudra ou attendra. Néanmoins, certaines personnes utiliseront ce constructeur par défaut simplement parce que c'est la première option que leur IDE leur donne.Et puis ils auront des bugs confus causés par des structures éliminées qui auraient dû être remplies de données, ou ils perdront du temps à essayer de comprendre pourquoi ils ne peuvent pas définir les propriétés sur une structure immuable. Du point de vue de la conception de l'API, je souhaite qu'il soit possible de masquer le constructeur par défaut. –
+1 @ MB. Un constructeur par défaut privé serait utile, même si un "imbécile" déterminé peut contourner ce problème. En tant que sel C++, je pense à 'private' comme un indice pour ne pas vous tirer dans le pied, il y a toujours une solution de travail en utilisant des pointeurs. Et la sémantique des tableaux peut être prise en compte en ne permettant pas la création de tableaux de ces structures. –
@roryapL Correction, merci. –