□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

□□ C shap_16. C# 상속과 생성자, base 키워드 /

업케스팅(Upcastting) , 다운캐스팅(Downcastting) / 중첩클래스

상속과 생성자

상속 관계에서의 생성자 호출시 주의할점

-> 상위 클래스가 디폴트 생성자가 아닌 인자가 있는 생성자가 정의 되어 있는

경우에는 상속으로 인한 상위 클래스의 생성자 호출에 문제가 발생합니다.

■ 1. base 키워드

-> 정의 : 상위클래스를 참조할때 사용한다. (오버로드문제)

왜사용하나? : 상위클래스에 인자 두개로된 함수가 존재할때, 하위클래스에서도 두개의 인자를 같는 함수를

반드시 정의 해야 하는대 (오류가 생기므로) 이때 base 키워드를 사용합니다.

1) 첫번째 사용법 : 현재 클래스의 상위클래스를 참조할때 사용한다. (오버로드 문제..)

▶ 형식 :

public 상속받은하위클래스명 ( 상위클래스의 인자형식) : base ( 상위클래스의 인자형식)

ex ) 상위 클래스를 참조할때의 하위클래스 함수메서드 형태

public 현제클래스명 (int x, int y)
: base(x, y) // -> 인수타입이 같은 상위 클래스를 참조하겠다 (base 키워드)
{
}

2) 두번째 사용법 : 상위클래스를 참조하고 추가로 하위클래스도 사용할때 (상위클래스 + 하위클래스)

▶ 형식 :

public 상속받은하위클래스명 ( 상위클래스의 인자형식)

{

base . 상위클래스메서드명()

ex ) 상위 클래스를 참조할때의 하위클래스 함수메서드 형태

public 현제클래스명 (int x, int y)

{

base . 상위메서드명() ; // -> ① 상위클래스를 호출한다.

Console.WriteLine(" 이렇게쓰는겁니다") ;

// -> ② 하위클래스도 호출된다 (구체적인 코딩부분 추가되는의미)

}

▷ 사용법 :

class GrandFather
{
public void Special()
{
Console.WriteLine("상위클래스 호출");
}
}

class Father : GrandFather
{
new public void Special()
{
// 상위,하위클래스 모두 호출
base.Special();
Console.WriteLine("하위클래스 호출");
}
}

static void Main(string[] args)
{

Father A1 = new Father();
A1.Special();
}

■ 2. 업캐스팅(Upcastting) 과 다운캐스팅(Downcastting) : 상속 관계의 객체 형 변환

-> 클래스도 상용자 정의 데이터형(Type) 이므로 형 변환이 가능합니다.

즉 상위클래스에 상속 관계에 있는 하위클래스 라고 할때 이들로 부터 생성된 객체는 서로 형 변환이 가능합니다.

○ 업캐스팅 : 자식에서 부모로 형변환

( 올리다 , 위로 올리다 자식이 위로 올라가다 -> 큰데이터형에 작은 데이터형이 속하므로 암시적 형변환 )

-> 형변환 되었으므로 꼭 부모객체만 사용가능

○ 다운캐스팅 : 부모가 자식으로 형변환시도 ->

( 부모인 큰공간이 자식인 작은 공간으로 가려하면 자리가 부족하므로 명시적 형변환이 필요함 )

-> 형변환 되었으므로 꼭 자식객체만 사용가능

▷ 업캐스팅

상위클 변수1 = new 하위클();

A1 Fr = new A2();

▷ 다운캐스팅

하위클 변수2 = (하위클)변수1;

A2 Se = (A2)Fr;

class A1
{
public A1() { } //생성자

public void Special()
{ Console.WriteLine("상위클래스 호출"); }
}
//----------------------------------------------------------
class A2 : A1
{
new public void Special()
{ Console.WriteLine("하위클래스 호출"); }
}

static void Main(string[] args)
{
// 상위클래스 형 레퍼런스 변수에 할당
A1 Fr = new A2(); //-> 업캐스팅 ( Up castting ) : 형식 : 상위클 변수1 = new 하위클();

// 상위 클래스의 메서드를 호출
Fr.Special();
//-----------------------------------------------------------
// 명시적으로 상위 타입 변수를 하위 타입으로 변환
A2 Se = (A2)Fr; //-> 다운캐스팅 ( Down castting ) : 하위클 변수2 = (하위클)변수1;

// 하위클래스의 메서드를 호출
Se.Special();
}

■ 3. 중첩 클래스

-> 클래스안에 내포된 클래스 또는 중첩클래스라고도 하며 클래스를 조합하는것인데

※ 객체의 특성중에 조합성 (Composition) 이 있다. : 어느객체가 또다른 객체를 포함할수 있다는 특성을 말한다.

이런것을 중첩 클래 도는 내포된클래스(Nested Class) 라고 합니다.

'C#' 카테고리의 다른 글

c# panel border color 변경  (0) 2012.07.13
C# 한글,영어 문자열 길이 알아보기  (0) 2012.07.10
Visual Studio 2010 단축키  (0) 2012.06.20
C# string.format 예제  (0) 2012.06.20
windows form 예제 (c#)  (0) 2012.05.23
Posted by 요지
,