반응형

C# : this와 base

정리배경

 무래도 C++을 사용하다가 C#을 접하게 되었기 때문에 유사한 키워드가 많아서 간과 하게 되는 부분들이 많다. 특히 this의 경우 친숙한 키위드이기 때문에 처음 공부를 할 때 스킵을 했다가 간단하면서 유용한 추가 기능이 있다는 것을 나중에 알게 되었다. base는 Java의 super와 같은 개념이나 이 역시 친숙한 기능은 아니였다.


 이러한 키워드들은 자주 사용하기 때문에 잊을 리는 없지만 정리 차원에서 작성해 놓는다.



this 키워드

 정의 된 클래스 내의 맴버(member)를 가르킬때 사용이 된다. 이러한 역할은 기존의 C++의 this와 동일한 기능이다.

 덤으로 코드 스타일은 프로젝트를 진행하는 팀별로 차이가 있지만, 맴버 객체 이름을 정할때 언더바("_")을 붙이거나 소문자 엠(m)을 붙이는 경우들이 있다.


예시1

class Book
{
    decimal isbn;
    public Book(decimal isbn)
    {
        this.isbn = isbn;
    }
}




 다른 기능은 클래스 내의 생성자에서 다른 생성자를 호출할때 사용된다. 일반적으로 생성자의 스코프(Scope)안에서 다른 생성자 호출을 되지 않지만, 생성자명 정의 직후 스코프전에 this 키워드를 사용하여 동일한 클래스내의 생성자를 호출하여 입력값을 전달하는게 가능해진다.


예시2

class Book
{
    decimal isbn;
    string title;
    string author;

    public Book(decimal isbn, string title)
        : this(isbn, title, string.Empty)
    {
    }

    public Book(decimal isbn, string title, string author)
    {
        this.isbn = isbn;
        this.title = title;
        this.author = author;
    }

}




base 키워드

 Java의 super와 같은 키워드로 상속시 부모생성자에 입력값을 전달해야 할 경우 사용이 가능하다.


예시3

// 부모(parent)
class Book
{
    decimal isbn;
    public Book(decimal isbn)
    {
        this.isbn = isbn;
    }
}

// 자식(child)
class EBook : Book
{
    public EBook(decimal isbn)
        : base(isbn)
    {
    }
}




 C#의 base는 생성자 뿐만아니라 부모의 메서드를 호출 할 경우에도 사용이 가능하다. 이러한 기능은 후에 winform 등 override하여 기존 기능을 유지하면서 확장해야 할 경우에도 사용한다.

예시4

// 부모(parent)
public class Computer
{
    bool powerOn;
    public void Boot()
    {
        powerOn = true;
    }
}

// 자식(child)
public class Notebook : Computer
{
    public void ScanFinger()
    {
        base.Boot();
    }
}




참조자료

시작하세요 C#프로그래밍(서적)

반응형

+ Recent posts