2012-11-21 10 views
8

Ich folge einer Konvention, dass ich keine print-Anweisungen in Klassen verwenden werde, aber ich habe eine Parameterüberprüfung in einem Konstruktor durchgeführt. Bitte sagen Sie mir, wie ich diese Validierung, die ich im Konstruktor gemacht habe, an die Main-Funktion zurückliefern kann.Wie gibt man einen Wert mit Konstruktor in C# zurück?

Antwort

26

Der Konstruktor hat einen Wert zurückgeben - die Art aufgebaut ist ...

Ein Konstruktor soll nicht jede andere Art von Wert zurückzukehren.

Wenn Sie in einem Konstruktor validieren, sollten Sie Exceptions auslösen, wenn die übergebenen Werte ungültig sind.

+0

Oohh, ich wünschte, ich könnte tausend Mal abstimmen. Es ist so ermüdend mit diesem permissiven Validierungsstil, der sich wie Krebs ausbreitet. – jgauffin

+0

@jgauffin - Welchen Stil meinst du? – Oded

+0

Zum Beispiel mit DataAnnotation Attribute auf Ihre Domain/Geschäftsmodelle. d.h. zulassen, dass Objekte ungültige Informationen haben und sich auf den aufrufenden Code verlassen, um sicherzustellen, dass alles validiert und korrekt ist. Sie wissen, .. Verletzung Kapselung. – jgauffin

4

Konstruktoren haben keinen Rückgabetyp, aber Sie können Werte anhand des Schlüsselworts ref als Referenz übergeben. Es wäre besser, eine Ausnahme vom Konstruktor zu werfen, um einen Fehler bei der Validierung anzuzeigen.

public class YourClass 
{ 
    public YourClass(ref string msg) 
    { 
     msg = "your message"; 
    } 

}  

public void CallingMethod() 
{ 
    string msg = string.Empty; 
    YourClass c = new YourClass(ref msg);  
} 
+5

Dass Sie _can_ nicht Sie _should_ bedeuten können. – Oded

0

Wenn ein Konstruktor ein ungültiges Argument erhält, ist es üblich, eine Ausnahme auszulösen. Sie können diese Ausnahme abfangen und die darin enthaltenen Daten analysieren.

0

Ein Konstruktor gibt den Typ zurück, der instanziiert wird, und kann bei Bedarf eine Ausnahme auslösen Vielleicht eine bessere Lösung wäre eine statische Methode zu hinzuzufügen versuchen eine Instanz der Klasse zu erstellen:

public static bool TryCreatingMyClass(out MyClass result, out string message) 
{ 
    // Set the value of result and message, return true if success, false if failure 
} 
1

einen Constructor Stelle mit Out-Parametern und Ihren Rückgabewert über denselben senden.

public class ClassA 
{ 
    public ClassA(out bool success) 
    { 
     success = true; 
    } 
} 
+0

Deine Klasse ist zu zerbrechlich, wenn es dazu kommt. –

Verwandte Themen