2010-02-11 3 views
3

Я пытаюсь создать перегруженный конструктор для класса. Я думаю, что это должно быть довольно просто, однако я не могу заставить его работать.Перегрузка конструктора объекта C#

Любые идеи?

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); 
    } 

Это не скомпилируется правильно, и я не могу понять, как это сделать.

+0

"Это не компилируется правильно", что ошибка есть вы получаете? – Juliet

+2

Другие рассмотрели конкретную проблему конструкторов цепочки. Я бы хотел добавить дизайнерскую критику. Очень сложно вызвать метод Save() из конструктора. Конструкторы должны делать как можно меньше, чем инициализировать объект. – Josh

+0

Извините, я не указал ранее. Класс называется SaveFile. Это просто сериализуемая форма структуры данных. – WedTM

ответ

6

У вас неправильный синтаксис для вызова перегруженного конструктора из конструктора по умолчанию.
Для вызова перегруженного конструктора в том же классе, используйте следующий синтаксис:

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

Если вы хотите вызвать конструктор базового класса, то вы должны использовать ключевое слово base вместо this. В вашем случае код будет гласить:

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

Смотрите! Я знал, что это было что-то простое, что мне не хватало! – WedTM

1

Попробуйте

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") 
    { 
    } 

Однако, что на самом деле должно быть:

public SaveFile() 
    : this(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"SaveFile.DAT")) 
    { 
    } 
Смежные вопросы