E 'possibile nascondere il costruttore senza parametri da un utente in C#nascondere senza parametri costruttore sul struct
Voglio costringerli utilizzare sempre il costruttore con i parametri
esempio questa classe posizione
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;
}
}
voglio solo che gli utenti siano in grado di nuovo una posizione specificando il coordinate x e y
Tuttavia, il costruttore senza parametri è SEMPRE availiable
non riesco a renderlo privato . O anche definirlo come pubblico
Ho letto questo Why can't I define a default constructor for a struct in .NET?
ma realmente non aiuterà
Se questo non è possibile - qual è il modo migliore per individuare se la posizione mi viene passato ha valori?
Controllare esplicitamente ogni campo proprietà? C'è un modo più semplice?
grazie
Lo vedo come un problema di usabilità più di ogni altra cosa. Il costruttore predefinito potrebbe creare un oggetto _valid_, ma per molte strutture non sarà ciò che l'utente vorrebbe o si aspetterebbe. Tuttavia alcune persone useranno quel costruttore di default solo perché è la prima opzione che i loro IDE danno loro.E poi avranno confusi bug causati da strutture azzerate che dovrebbero essere state riempite di dati, o perderanno tempo a cercare di capire perché non possono impostare le proprietà su una struttura immutabile. Da una prospettiva di progettazione API vorrei che fosse possibile nascondere il costruttore predefinito. –
+1 @ MB. Un costruttore privato predefinito sarebbe d'aiuto, anche se un determinato "pazzo" può aggirarlo. Come un sale in C++, penso a 'private' come un suggerimento per non spararti ai piedi, c'è sempre un work-around che usa i puntatori. E la semantica dell'array può essere gestita semplicemente non consentendo la creazione di array di tali strutture. –
@roryapL Risolto, grazie. –