namespace treach.tistory.com
{
// 인터페이스 : interface
interface A
{
void AA(); //추상매소드만 선언 가능.
} //(abstract 예약어는 사용하지 않으며, 자식 클래스에서 매소드 구현 필요.
interface B
{
void BB();
}
class _interface : A, B //다중 상속 가능.
{
public void AA() //상속 받은 클래스에서 매소드를 강제로 정의를 요함.
{
Console.Write("AA 매소드 구현\n");
}
public void BB()
{
Console.Write("BB 매소드 구현\n");
}
}
//추상화 : abstract, override
abstract class Animal
{
public void Sex() //일반 매소드를 포함할 수 있음.
{
Console.Write("Animal의 Sex 매소드\n");
}
public abstract void Eat(); //자식 클래스에서 강제로 정의를 요함.
}
class Dog : Animal
{
public override void Eat() //override 예약어로 선언된 매소드 재정의함.
{
Console.Write("Dog의 Eat 매소드 구현\n");
}
}
//가상화 : virtual, override
class Car
{
public void Name() //일반 매소드 정의 가능.
{
Console.Write("Car의 Name 매소드\n");
}
public virtual void Color() 자식 클래스에서 필요에 따라 재정의 가능하도록 virtual 선언.
{
Console.Write("Car의 Color 매소드\n");
}
}
class Bus : Car
{
//public override void Color() 필요시 자식 클래스에서 재정의 가능함.
//{
//Console.Write("Bus의 Color 매소드 정의 가능\n");
//base.Color(); 부모의 Color 매소드를 그대로 사용
//}
}
class MAIN
{
static void Main(string[] args)
{
_interface interface_Program = new _interface();
interface_Program.AA();
interface_Program.BB();
Dog _abstract = new Dog();
_abstract.Sex();
_abstract.Eat();
Bus _virtual = new Bus();
_virtual.Name();
_virtual.Color();
}
}
}
간략하게 Interface, Abstract, virtual를 구분하여 사용하였으며, 주석으로 용도를 기록함.
Interface : 다중 상속 가능, 매소드 선언만 가능, 자식 클래스에서 매소드 구현 필요, 생산성 및 가독성 증가.
Abstract : 다중 상속 안되며, 일반 매소드를 포함할 수 있고, 자식클래스에서 매소드 구현 필요.
virtual : 일반 클래스의 매소드를 필요에 따라 자식 클래스에서 재구현 가능하도록 편의를 제공.
'프로그래머 > C#' 카테고리의 다른 글
코딩 테스트. (0) | 2013.01.25 |
---|---|
디아블로3 경매장 프로그램(스톱워치) (1) | 2012.08.05 |
C#에서 Oracle TO_DATA 문제 (0) | 2012.04.05 |
Label 동적 생성 (0) | 2012.03.16 |
Delegate 이해 및 예제 (0) | 2011.11.24 |