Ist es möglich, den parameterlosen Konstruktor von einem Benutzer in C#hide parameterlosen Konstruktor auf struct
ich sie den Konstruktor immer erzwingen will verstecken mit Parametern verwenden
z.B. diese Position Klasse
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;
}
}
ich nur Benutzer wollen eine Position, um neue up der Lage sein, durch die x- und y-Angabe Koordinaten
Allerdings ist der parameterlosen Konstruktor IMMER availiable
ich nicht machen kann es privat . Oder sogar definieren es als öffentliche
habe ich gelesen, das Why can't I define a default constructor for a struct in .NET?
aber es tut wirklich
helfen Wenn dies nicht möglich ist - was der beste Weg ist, zu erkennen, ob die Position I bestanden Bin hat Werte?
Die Überprüfung jedes Eigenschaftsfelds? Gibt es einen schöneren Weg?
dank
Ich sehe das als ein Usability-Problem mehr als alles andere. Der Standardkonstruktor könnte ein _valid_ Objekt erzeugen, aber für viele Strukturen ist es nicht das, was der Benutzer will oder erwartet. Trotzdem werden einige Leute diesen Standardkonstruktor verwenden, nur weil es die erste Option ist, die ihre IDE ihnen gibt.Und dann werden sie verwirrende Bugs haben, die durch zeroout-Strukturen verursacht werden, die mit Daten gefüllt sein sollten, oder sie werden Zeit verschwenden, um herauszufinden, warum sie keine Eigenschaften für eine unveränderbare Struktur festlegen können. Aus Sicht des API-Designs wünschte ich, dass es möglich wäre, den Standardkonstruktor zu verbergen. –
+1 @MB. Ein privater Standardkonstruktor würde helfen, selbst wenn ein bestimmter "Dummkopf" das umgehen könnte. Als C++ - Salz halte ich "Private" für einen Hinweis, sich nicht in den Fuß zu schießen, es gibt immer einen Wegweiser mit Zeigern. Und Array-Semantiken können berücksichtigt werden, indem Arrays von solchen Strukturen einfach nicht erzeugt werden. –
@roryapL Korrigiert, danke. –