클래스 내부의 코드에서 (인스턴스화된) 객체 자신을 가리킬 수 있도록 this 예약어가 제공된다.
또한, 클래스 내부의 코드에서 자신이 상속한 부모 클래스를 가리킬 수 있도록 base 예약어가 제공된다.
class Person
{
string name;
int age;
string nationality;
public Person(string name) : this(name, 1)
{
}
public Person(string name, int age) : this(name, age, string.Empty)
{
}
public Person(string name, int age, string nationality)
{
this.name = name;
this.age = age;
this.nationality = nationality;
}
}
🧐 더 알아보기
인스턴스 메서드는 명시적인 매개변수가 없어도 컴파일러가 인스턴스 변수를 넘긴다. 그렇기 때문에 인스턴스 메서드 내부에서 인스턴스 필드에 접근할 수 있는 것이다. 메서드 내부에서 인스턴스 멤버에 접근하지 않는다면, 정적 메서드를 쓰는 것이 (크게 의미 있는 정도는 아니지만) 성능 상 유리할 수 있다.
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.name = "Jenny";
person.Introduce();
}
}
class Person
{
public string name;
public void Introduce()
{
Console.WriteLine("My name is "+this.name);
}
}
위의 코드는 아래와 같이 컴파일 된다.
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.name = "Jenny";
person.Introduce(person);
}
}
class Person
{
public string name;
public void Introduce(Person this)
{
Console.WriteLine("My name is "+this.name);
}
}
2. base
✍ 샘플 코드
class Program : Object
{
static void Main(string[] args)
{
Person p1 = new Female();
Person p2 = new Female("Jay");
Console.WriteLine(p1.name);
Console.WriteLine(p2.name);
}
}
class Person
{
public string name;
public Person(string name)
{
this.name = name;
}
}
class Female : Person
{
public Female() : base("NoName")
{
}
public Female(string name) : base(name)
{
}
}
✅ 결과
NoName
Jay