아디봉의.net

생성자를 호출하는 THIS() , BASE() 본문

C#/C# 객체지향

생성자를 호출하는 THIS() , BASE()

아디봉 2012. 9. 26. 14:07

this()

- 자신의 생성자를 호출할 때도 사용

- 자신의 생성자를 재사용하기 위해서 생성자를 호출하는 방법을 제공

 

public class ThisSelf{

pricate string name;

private int age;

 

public ThisSelf() : this("이름없음"){

Console.WriteLine("매개변수가 없는 생성자");

}

public ThisSelf(string name) : this(name, -1){

Console.WriteLine("매개변수가 1개있는 생성자");

}

public ThisSelf(string name, int age) : {

Console.WriteLine("name : " + name , "age : " + age);

Console.WriteLine("매개변수가 2개있는 생성자");

}

public static void Main(){

 

ThisSelf ts1 = new ThisSelf();

ThisSelf ts1 = new ThisSelf("홍길동");

ThisSelf ts1 = new ThisSelf("김삿갓", 50);

 

}

}

 

name:이름없음 number:-1

매개변수가 2개있는 생성자

매개변수가 1개있는 생성자

매개변수가 없는 생성자

name:홍길동 number:-1

매개변수가 2개있는 생성자

매개변수가 1개있는 생성자

name:김삿갓 number:50

매개변수가 2개있는생성자

 

ThisSelf클래스의 ThisSelf() 생성자를 호출했을 때

- this("이름없음")은 ThisSelf(String name)생성자를 호출한다.

-this(String name) 생성자는 다시this(name, -1)이라는 곳에서 ThisSelf(String name, int age)생성자를 호출한다.

 

 

Base()

this는 각각의 메모리를 구분하기위한 방법이며, 생성자를 호출하기 위한 방법으로 사용된다.

이외에 부모와 자식간의 메모리를 구분하기 위한 키워드가 바로 base키워드이다.

아들클래스 내부에서 아버지 클래스의 함수를 사용하고 싶다면 base라는 키워드를 사용하면 되는 것이다.

 

using System;

public class NewFather{

public virtual void OverrideFunc(){

Console.WriteLine("아버지함수");

}

}

 

public class NewSon :NewFather{ //NewFather 상속

public override void OverrideFund(){

Console.WriteLine("아들의 재정의 함수");

}

 

public void TestFunc(){

base.OverrideFunc(); //NewFather의 메서드 호출

}

 

public static void Main(){

NewSon ns = new NewSon();

ns.OverrideFunc(); //NewSon의 함수호출

ns.TestFunc(); //TestFunc() 내에서 NewFather의 함수호출

}

}

 

아들의 재정의 함수

아버지의 함수

 

상위클래스의 생성자를 호출하는 base()

부모의 생성자에 매개변수 있는 생성자만 있다고 가정하자. 그리고 아들이 상속을 받았따고 가정하자.

 

public Class BaseFather(String name){

pulbic BaseFather(String name){

 //...

}

}

 

public class BaseSon : BaseFather{ //error 생성자 매개변수가 있는데 넣어주지않음

public BaseSon(string str){

//...

}

}

 

 

 

 

 

 

'C# > C# 객체지향' 카테고리의 다른 글

c# 박싱과 언박싱  (0) 2012.09.27
추상클래스와 추상함수  (0) 2012.09.26
c#객체지향 생성자(Constructor)  (0) 2012.09.25
C# 상속  (0) 2012.09.20
C# 오버로딩(overloading)  (0) 2012.09.20