WedTM
WedTM

Reputation: 2647

C# Object Constructor Overloads

I'm trying to have an overloaded constructor for a class. I think this should be fairly simple, however I can't seem to make it work.

Any ideas?

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

This doesn't compile correctly, and I can't figure out how to do make it work.

Upvotes: 3

Views: 393

Answers (3)

Kasper Holdum
Kasper Holdum

Reputation: 13373

You have the wrong syntax for calling an overloaded constructor from within the default constructor.
To call an overloaded constructor in the same class, use this syntax:

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

If you wanted to call a constructor in the base class, then you would use the base keyword instead of this. In your case the code would read:

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

Upvotes: 6

James Curran
James Curran

Reputation: 103575

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

However that really should be:

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

Upvotes: 2

gilbertc
gilbertc

Reputation: 1069

Try this

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

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

Upvotes: 1

Related Questions