Reputation: 2647
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
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
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
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