추상클래스와 유사한 점
- 본체가 정의되지 않은 추상 메소드를 가진다는 것
- 객체를 생성할 수 없다는 점
추상클래스 - 추상 메소드를 선택적으로 가짐
인터페이스 - 메소드들이 전부 추상, 완전 추상클래스 라고도 함
- 포함할 수 있는 멤버의 종류가 제한
- 멤버를 선언하는 형식에도 차이가 있고, 다중 상속에도 사용할수 있다
- 멤버는 주로 메소드, 프로퍼티, 인덱서, 이벤트
- 필드, 상수, 내부 타입, 생성자, 연산자는 포함 불가능
프로퍼티 - 객체의 정보에 접근하는 메소드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | using System; namespace IUnitEnergy { interface IUnit { int Energy { get; } } class Marine : IUnit { private int Life = 100; public int Energy { get { return Life; } } } class Zealot : IUnit { private int Shield = 100; private int Life = 100; public int Energy { get { return Shield + Life; } } } class Program { static void Main(string[] args) { Marine M = new Marine(); Zealot Z = new Zealot(); } } } |
- 프로퍼티 구현이 다 제각각이기 때문에 인터페이스는 구현을 제공할수 없다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | using System; namespace ICar { interface ICar { void Run(); void Back(); } class Sedan : ICar // 공개된 가상으로 선언하여 파생클래스들이 재정의하게 허가 { public virtual void Run() { Console.WriteLine( "부웅부웅" ); } public virtual void Back() { Console.WriteLine( "띠리리리리" ); } } abstract class Suv : ICar // Run메소드를 확정적으로 구현 { public virtual void Run() { Console.WriteLine( "덜덜" ); } public abstract void Back(); public abstract void Run4Wd(); } class Grandeur : Sedan { public override void Run() { Console.WriteLine( "달려도 소리가 안들림" ); } public void booking() { Console.WriteLine( "야타" ); } } class Matiz : Sedan { public override void Run() { Console.WriteLine( "작은차" ); } public void Parking() { Console.WriteLine( "주차가능" ); } } class Korando : Suv { public override void Back() { Console.WriteLine( "비켜" ); } public sealed override void Run4Wd() { Console.WriteLine( "4륜" ); } } class Program { public static void CarTest(ICar Car) { Car.Run(); Car.Back(); } static void Main(string[] args) { ICar G = new Grandeur(); CarTest(G); ICar M = new Matiz(); CarTest(M); ICar K = new Korando(); CarTest(K); } } } |
'Study > C#' 카테고리의 다른 글
C# 인터페이스 - 2. 인터페이스 활용 (열거하기) (0) | 2012.01.05 |
---|---|
C# 인터페이스 - 1. 인터페이스 상속 (0) | 2012.01.05 |
C# 인터페이스 - 1. 인터페이스 (0) | 2012.01.04 |
C# 클래스 상속 - 3. 정적 클래스 (0) | 2012.01.04 |
C# 클래스 상속 - 3. 봉인 클래스 (0) | 2012.01.03 |