C# - νŒŒμƒ ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(2)

2020. 11. 19. 16:30ㆍ전곡 κ³Όλͺ©/μœˆλ„μš° ν”„λ‘œκ·Έλž˜λ°

C# - νŒŒμƒ ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(2)

 

μΈν„°νŽ˜μ΄μŠ€

- κ΅¬ν˜„λ˜μ§€ μ•Šμ€ λ©€λ²„λ“€λ‘œ κ΅¬μ„±λœ μ„€κ³„μ˜ ν‘œν˜„μ΄λ‹€. ν‹€λ§Œ μž‘μ•„λ†“μ€ 것이라고 μƒκ°ν•˜λ©΄ νŽΈν•  것 κ°™λ‹€. C#μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œ 닀쀑 상속을 μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— μ€‘μš”ν•œ κ°œλ…μ΄ λœλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€μ˜ μ²«κΈ€μžλŠ” I둜 μ‹œμž‘ν•˜λŠ”κ²Œ 관둀이며 μΈν„°νŽ˜μ΄μŠ€ λͺΈμ²΄λŠ” κ΅¬ν˜„λ˜μ§€ μ•Šμ€ λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹°, μΈλ±μ„œ, μ΄λ²€νŠΈκ°€ 될 수 μžˆλ‹€.

 

interface IMethod{
	void Insert(string str);	//λ©”μ†Œλ“œ
    int Count {get;set;}	     //ν”„λ‘œνΌν‹°
    string this[int index]{get;set;}   //μΈλ±μ„œ
    event MyEventHandler changed;      //이벀트
}

μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ„ μ–Έλœ 멀버듀은 λͺ¨λ‘ public 속성을 가지며 static을 μ‚¬μš©ν•  수 μ—†λ‹€.

그리고 μΈν„°νŽ˜μ΄μŠ€λŠ” μΆ”μƒν΄λž˜μŠ€μ™€ 달리 overrideλ₯Ό κΈ°μˆ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

 

 

μΈν„°νŽ˜μ΄μŠ€μ˜ ν™•μž₯

μΈν„°νŽ˜μ΄μŠ€λ„ 상속 처럼 ν™•μž₯ν•  μˆ˜κ°€ μžˆλŠ”λ° μ΄λ•Œ 기쑴의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 베이슀 μΈν„°νŽ˜μ΄μŠ€, μƒˆλ‘­κ²Œ μ„ μ–Έλœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό νŒŒμƒ μΈν„°νŽ˜μ΄μŠ€λΌκ³  ν•œλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받아 ν΄λž˜μŠ€κ°€ μ„ μ–Έλ˜μ—ˆμ„ λ•Œ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ†Œλ“œλ“€μ€ 본질적으둜 좔상 λ©”μ†Œλ“œμ΄κΈ° λ•Œλ¬Έμ— λͺ¨λ‘ κ΅¬ν˜„ν•˜μ§€ μ•ŠμœΌλ©΄ κ·Έ ν΄λž˜μŠ€λŠ” 좔상 ν΄λž˜μŠ€κ°€ λœλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€ 예제

using System
interface IRectangle {
	void Area(int width, int height);
   }
interface ITriangle {
	void Area(int width, int height);
   }
class Shape : IRectange, ITriangle {
	void IRectange.Area(int width, int height){
    	Console.WriteLine(width*height);
       }
    void ITriangle.Area(int width, int height){
		Console.WriteLine(width*height/2);
       }
    }
class ImpleApp{
	public static void Main(){
    	Shape s = new Shape();
        // s.Area(10,10);
        // s.IRectangle.Area(10,10); //error
        ((IRectange)s).Area(20,20); //캐슀트 ν›„ λ©”μ†Œλ“œ 호좜
        ((ITriangle)s).Area(20,20);
        IRectangle r = s; //Shape객체 생성 ν›„ μΈν„°νŽ˜μ΄μŠ€ μžλ£Œν˜•μœΌλ‘œ 캐슀트
        ITriangle t = s;
        r.Area(30,30);
        t.Area(30,30);
        }
      }