2015년 3월 6일 금요일

뇌자극 C# 5.0 - 7강 - 2

7강이 워낙 길어서 2개로 나눴다 -_-;

7.10 오버라이딩과 다형성


다형성 : 객체가 여러 형태를 가질 수 있음을 뜻한다.
상속받아 만들어진 파생 클래스를 통해 다형성을 실현한다

예제)
class ArmorSuite
{
    public virtual void Initialize()
    {
       Cosole.WriteLine("Armored");
    }
}

class IronMan : ArmorSuite
{
   //...
}

class WarMachine : ArmorSuite
{
   //...
}

ArmorSuite의 옵션을 바꿔주려면 Initialize()를 재정의 해줘야 한다
하위에서 상위의 메소드를 바꾸는 것을 오버라이딩(Overriding)라고 한다.

메소드를 오버라이딩 하려면 한가지 조건이 필요한데.
기반 클래스의 메소드가 virtual 키워드로 한정되어 있어야 한다.

하위 클래스에서는 컴파일러에게 재정의 한다는 것을 알려주기 위해
override로 한정해줘야 한다.

class IronMan : ArmorSuite
{
    public override void Initialize()
    {
        base.Initialize();
        Console.WriteLine("Repulsor Rays Armed");
    }
}

class WarMachine : ArmorSuite
{
    public override void Initialize()
    {
        base.Initialize();
        Console.WriteLine("Double-Barrel Cannons Armed");
        Console.WriteLine("Micro-Rocket Launcher Armed");
    }
}

7.11 메소드 숨기기

기반 클래스에서 구현된 버전의 메소드를 감추고 
파생 클래스에서 구현된 버전만 보여주는 것

파생 클래스 버전의 메소드를 new 한정자로 수식하면 된다.
(생성자 호출할 때의 new와 다른 기능이다.이름만 같다.)

예제)
class Base
{
   public void MyMethod()
   {
      Console.WriteLine("Base.MyMethod()");
   }
}

class Derived : Base
{
    public new void MyMethod()
    {
       Console.WriteLine("Derived.MyMethod()");
    }
}

7.12 오버라이딩 봉인하기


클래스가 상속 불가로 만들려면 sealed 를 class 앞에 붙이면 된다.
메소드를 오브라이드를 못하게 하려면 역시 sealed를 매소드 앞에 붙이면 된다.
단, virtual로 선언된 가상 메소드를 오버라이딩한 메소드만 가능하다

7.13 구조체


복합 데이터 형식에는 클래스 말고도 구조체가 있다.
struct 키워드를 사용해서 선언한다.

-클래스와 구조체의 차이점-

클래스 - 참조형식 
구조체 - 값형식

클래스 - 얕은 복사 
구조체 - 깊은 복사

클래스 - new 연산자와 생성자 필요
구조체 - 선언만으로도 생성

클래스 - 상속 가능
구조체 - 상속 불가

클래스 - 매개변수 없는 생성자 선언 가능
구조체 - 매개변수 없는 생성자 선언 불가능

댓글 없음:

댓글 쓰기