Wenn ich eine Klasse mit zwei Konstrukteuren wie folgt:Können Sie nach NULL suchen, wenn ein Konstruktor einen anderen Konstruktor aufruft, der das Objekt verwendet, das dem ersten Konstruktor übergeben wurde?
class Foo
{
public Foo(string name)
{...}
public Foo(Bar bar): base(bar.name)
{...}
}
ist es eine Möglichkeit, die ich überprüfen kann, ob bar null ist, bevor ich eine null-Verweisausnahme erhalten?
möchten Dies ist horrend und falsch. Das Auslösen von Ausnahmen während der Konstruktion bedeutet, dass das Objekt nicht erfolgreich erstellt wurde, was bedeutet, dass Destruktoren nicht aufgerufen werden. Wenn Sie bereits Ressourcen zugewiesen haben, die ordnungsgemäß entsorgt werden müssen, haben Sie die Klasse jetzt auf subtile Weise schwer zu debuggen. Ausnahmen beim Bau: Sag einfach nein. Foo sollte stattdessen nicht sperren, wenn der Name null ist. Oder Sie können den Namenseinstellungscode in eine statische Datei extrahieren, die beide Konstruktoren aufrufen können. –
@Dirk meh, etwa 99,99% C# -Klassen * haben keine * a Finalizerthread –
wahr, es ist nur 0,01% horrend ist. –