Würde eine einfache Klasseninstanziierung jemals in C # fehlschlagen?

8

Ich habe Code von einem anderen Entwickler gesehen, der ungefähr so ​​aussieht:

%Vor%

(Es ist überall im Code)

Frage 1: Würde dieser Fehlerprotokollierungscode sogar aufgerufen werden? Wenn es keinen Speicher gäbe, würde nicht System.OutOfMemoryException auf diese erste Zeile geworfen werden?

Frage 2: Kann ein Aufruf an einen Konstruktor jemals null zurückgeben?

    
John Bubriski 19.07.2010, 18:39
quelle

5 Antworten

16

Sie haben Recht, und dieser Code ist falsch. Es wird OutOfMemoryException bei einem Fehler werfen. Dies ist in der Dokumentation klar:

  

"Wenn der neue Operator keine Zuweisung tätigt   Speicher, es löst die Ausnahme aus   OutOfMemoryException. "

Konstruktoren geben nichts zurück, geschweige denn null. Sie manipulieren ein Objekt, das bereits zugewiesen wurde.

    
Matthew Flaschen 19.07.2010, 18:42
quelle
2

Ich gehe davon aus, dass der Programmierer in C ++ gearbeitet hat und nicht weiß, wie die Dinge in C # funktionieren.

    
James Curran 19.07.2010 18:42
quelle
2

Nun, dieser Code ist eine andere Geschichte:

%Vor%

In diesem Fall könnte String Builder (denkbar) Null sein.

    
Brian Genisio 19.07.2010 18:47
quelle
1
  1. Nein. Eine OutOfMemoryException wird ausgelöst, wenn nicht genügend Speicher zum Zuordnen eines Objekts zur Verfügung steht.
  2. Nein
thecoop 19.07.2010 18:45
quelle
0

Hier ist eine bessere Version des Codes. Sie hätten viel größere Probleme, wenn nicht genügend Speicher vorhanden wäre, um eine Referenz zuzuweisen.

%Vor%     
Dmitry S. 19.07.2010 20:09
quelle