this
doesn't exactly qualify members hidden by a similar name - although that is what it is used for in most cases - it is a reference to the current instance of a class.
So if you have an Employee class as in your example:
public class Employee
{
private string name;
private string alias;
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
}
Then the constructor needs to access the class instance members via
this
in order not to be talking about the local, parameter based, versions which will have precedence. If you didn't have such a mechanism, then you wouldn't be able to access the class level version inside that constructor.
It's like if you are talking to your mate "Joe" and you need to refer to a different "Joe": "Joe at work", for example.
Normally, you would just call him "Joe", but because there is a local person also called "Joe" that would be confusing so you absolutely specify who you are talking about by adding the "at work" suffix.