2010-02-11 7 views
3

J'essaie d'avoir un constructeur surchargé pour une classe. Je pense que cela devrait être assez simple, mais je n'arrive pas à le faire fonctionner.C# Surcharge de constructeur d'objet

Des idées?

public SaveFile(string location) 
    { 
     // Constructor logic here 
     //TODO: Implement save event. 
     this.Save(location); 
    } 

    public SaveFile() 
    { 
     string location = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\SaveFile.DAT"; 
     SaveFile(location); 
    } 

Ceci ne compile pas correctement, et je n'arrive pas à comprendre comment le faire fonctionner.

+0

"Cela ne compile pas correctement" quelle erreur sont vous obtenez? – Juliet

+2

D'autres ont abordé le problème spécifique des constructeurs de chaînes. Ce que je voudrais ajouter est une critique de conception. Il est très mauvais d'appeler une méthode Save() à partir d'un constructeur. Les constructeurs devraient vraiment faire le moins possible à part l'initialisation de l'objet. – Josh

+0

Désolé, je n'ai pas spécifié plus tôt. La classe est nommée SaveFile. C'est juste une forme sérialisable de la structure de données. – WedTM

Répondre

6

Vous avez la mauvaise syntaxe pour appeler un constructeur surchargé à partir du constructeur par défaut.
Pour appeler un constructeur surchargé dans la même classe, utilisez cette syntaxe:

public ClassName(parameters) : this(otherParameters) 
{ 
    // logic 
} 

Si vous vouliez appeler un constructeur dans la classe de base, vous pouvez ensuite utiliser le mot-clé base au lieu de this. Dans votre cas, le code serait:

public SaveFile() : this(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "SaveFile.DAT") {} 
public SaveFile(string location) 
{ 
    this.Save(location); 
} 
+0

Voir! Je savais que c'était quelque chose de simple que je manquais! – WedTM

1

Essayez cette

public SaveFile(string location) 
{ 
    // Constructor logic here 
    //TODO: Implement save event. 
    this.Save(location); 
} 

public SaveFile(): this(Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\SaveFile.DAT") 
{ 
} 
2
public SaveFile() 
    : this(Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\SaveFile.DAT") 
    { 
    } 

Quoi qu'il devrait vraiment être:

public SaveFile() 
    : this(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"SaveFile.DAT")) 
    { 
    }