본문 바로가기
NOTE/Programming

[C#] 인터페이스

by DevAthena 2018. 4. 1.

출저 참고 : http://blog.eairship.kr/148 (누구나가 다 이해할 수 있는 프로그래밍 첫걸음 블로그)

를 공부하면서 나중에 다시보기 쉽게 정리한 것입니다. 원본은 위 글입니다.!


인터페이스(Interface)

- 선언 형식

1
2
3
4
interface 인터페이스명
{
     // ...
}
cs


- 포함 불가능 : 메소드, 이벤트, 인덱서, 속성, 필드

- 모든 멤버는 public으로 기본 지정.

- 몸통이 정의되어 ㅇ딨지 않은 추상적인 멤버를 가짐.

- 클래스는 다중 상속이 불가능하고 단일 상속만 할 수 있으나,

- 인터페이스는 다중 상속이 가능.

- ( 다른 인터페이스를 상속하거나, 클래스에서 인터페이스 하나를 여러 차례 상속할 수 있습니다. )


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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication32
{
    interface IMyInterfaceA
    {
        void print();
    }
 
    interface IMyInterfaceB
    {
        void print();
    }
 
    class MyClass : IMyInterfaceA, IMyInterfaceB
    {
        static void Main(string[] args)
        {
            MyClass mc = new MyClass();
             
            IMyInterfaceA imca = mc;
            imca.print();
 
            IMyInterfaceB imcb = mc;
            imcb.print();
        }
 
        void IMyInterfaceA.print()
        {
            Console.WriteLine("IMyInterfaceA.print() 호출.");
        }
 
        void IMyInterfaceB.print()
        {
            Console.WriteLine("IMyInterfaceB.print() 호출.");
        }
    }
}
cs


결과 : IMyInterfaceA.print() 호출.

 IMyInterfaceB.print() 호출.


- 32~40행을 보면 동일 함수를 구현시, 함수명 앞에 해당 인터페이스명을 명시하여 구현.


- 인터페이스가 인터페이스를 상속 가능

1
2
3
4
interface 자식인터페이스명 : 부모인터페이스명
{
   // ...
}
cs



- 예시 ( 인터페이스 -> 상속받은 인터페이스 -> 상속받은 클래스 )


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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication32
{
    interface ParentInterface{ 
            void myMethod(string str); 
    } 
    
    interface SubInterface : ParentInterface{ 
            void myMethod(string str, int i); 
    }
 
    class MyClass : SubInterface
    {
        public void myMethod(string str)
        {
            Console.WriteLine(str + " ParentInterface.myMethod() call!");
        }
        public void myMethod(string str, int count)
        {
            for (int i = 0; i < count; i++)
            {
               Console.WriteLine(str + " SubInterface.myMethod() " + i + " call!");
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            MyClass sif = new MyClass();
 
            sif.myMethod("Interface");
            sif.myMethod("Inherits"4);
        }
    }
}
 
cs


결과 : Interface ParentInterface.myMethod() call!

 Inherits SubInterface.myMethod() 0 call!

 Inherits SubInterface.myMethod() 1 call!

 Inherits SubInterface.myMethod() 2 call!

 Inherits SubInterface.myMethod() 3 call!



 


'NOTE > Programming' 카테고리의 다른 글

[C#] 컬렉션  (0) 2018.04.01
[C#] 예외처리  (0) 2018.04.01
[C#] 확장 메소드, 분할 클래스, 중첩 클래스  (0) 2018.04.01
[C#] 클래스의 상속  (0) 2018.04.01
[C#] Delegate && Event  (0) 2018.04.01