2016-05-04 15 views
4

Ich frage mich, wie ich diese Art von Konstrukteuren schreiben konnte:Constructor ohne neue C#

Person p = Person.CreateWithName("pedro"); 
Person p1 = Person.CreateEmpty(); 

Und mit dem Code jeden Konstruktor in separaten.

+1

Es ist eine statische Methode. 'public static Person CreateWithName (Name der Zeichenkette) {return new Person() {...}; } ' –

Antwort

2

Sie es wie folgt implementieren:

public class Person { 
    // Private (or protected) Constructor to ensure using factory methods 
    private Person(String name) { 
     if (null == name) 
     name = "SomeDefaultValue"; 

     //TODO: put relevant code here 
    } 

    // Factory method, please notice "static" 
    public static Person CreateWithName(String name) { 
     return new Person(name); 
    } 

    // Factory method, please notice "static" 
    public static Person CreateEmpty() { 
     return new Person(null); 
    } 
    } 
6

Das sind so genannte Factory-Methoden und technisch sind statische Methoden auf die Klasse (Person), die dann auf die Klasse (Person.Create) aufgerufen werden.

Technisch erstellen sie intern die Person mit neuen - aber es kann mit einem PRIVATEN KONSTRUKTOR passieren.

5

Sie nur eine statische Methode innerhalb dieser Klasse erstellen, das heißt

class Person { 
    public Person(string name) { 
    //Constructor logic 
    } 
    public static Person CreatePerson() { 
    return new Person(string.Empty); 
    } 
}