Перегрузка конструктора объекта C # - PullRequest
3 голосов
/ 11 февраля 2010

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

Есть идеи?

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

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

Ответы [ 3 ]

6 голосов
/ 11 февраля 2010

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

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);
}
2 голосов
/ 11 февраля 2010
 public SaveFile() 
   : this(Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\SaveFile.DAT")
    { 
    } 

Однако это действительно должно быть:

 public SaveFile() 
   : this(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"SaveFile.DAT"))
    { 
    } 
1 голос
/ 11 февраля 2010

Попробуйте это

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

public SaveFile(): this(Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\SaveFile.DAT")
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...