2013-03-13 2 views
15

인터페이스는 함수의 리턴 유형일 수 있습니다. 그렇다면 장점은 무엇입니까? 예 : 인터페이스 배열이 반환되는 위치는 다음과 같습니다.리턴 유형으로 인터페이스

public interface Interface 
{ 
    int Type { get; } 
    string Name { get; } 
} 

public override Interface[] ShowValue(int a) 
{ 
. 
. 

} 
+4

(1) 예. (2) 다형성을 허용하기 때문입니다. 의 –

+0

가능한 중복 [C 번호 - 목록 또는 IList의 ] (http://stackoverflow.com/questions/400135/c-sharp-listt-or-ilistt) 목록 또는 IList의 ] (HTTPS의 – ken2k

+0

가능한 중복 : //stackoverflow.com/questions/400135/listt-or-ilistt) – Squazz

답변

16

예, 인터페이스를 반환 할 수 있습니다.

는 각 인터페이스를 Ic를 구현의 클래스를 AB을 가정 해 봅시다 :이 예 func에서

public interface Ic 
{ 
    int Type { get; } 
    string Name { get; } 
} 

public class A : Ic 
{ 
    . 
    . 
    . 
} 

public class B : Ic 
    . 
    . 
    . 
} 

public Ic func(bool flag) 
{ 
    if (flag) 
     return new A(); 
     return new B(); 

} 

그것은 다른 개체를 반환 할 수 — 팩토리 메소드처럼!

+0

"Ic를 구현 한 객체를 반환"으로 인터페이스 반환을 해석 할 수 있습니까? 인터페이스의 인스턴스를 만들 수는 없지만 반환 할 수있는 것은 매우 혼란 스럽습니다. –

8

예. 가능합니다.

이점은 반환 (및 입력) 유형을 추상화 할 수 있다는 것입니다.

public interface IFruit{ } 

public class Apple: IFruit{} 

public class Pear: IFruit{} 

... 

public function IFruit SelectRandomFromBasket(Basket<IFruit> basket){ 
    // this function can return Apple, Pear 
} 
5

네, 가능하며 공개 기능을 위해서는 좋은 방법입니다. 대한

왜 귀하의 질문에, 내가 예를 들어, 그래서 기존의 답변을 참조하시기 바랍니다, 다른 사람의 답변을 붙여 복사하지 않습니다의 부분 :

+0

같은 주제에 대해 다른 질문/답변을 찾은 경우 [중복으로 닫기] (http : // stackoverflow. co.kr/faq # close) 다른 게시물에 링크하는 대신? –

+0

@ChaseFlorell 물론입니다.실제로 나는 내 자신의 답을 쓰고 있었고, * 이것이 이미 답변되었을 수도 있다는 것을 깨달았습니다. 그래서 제 자신의 텍스트를 지우고 도움이되는 링크를 추가했습니다 ... 그러나 어쨌든 중복 된 것으로 결론을 내렸습니다. – ken2k

17

interface은 매우 유효한 반환 값입니다. 인터페이스의 정의를 반환하지 않고 해당 인터페이스의 인스턴스을 반환한다는 것을 기억하십시오.

public interface ICar 
{ 
    public string Make { get; } 
} 

public class Malibu : ICar 
{ 
    public string Make { get { return "Chevrolet"; } } 
} 

public class Mustang : ICar 
{ 
    public string Make { get { return "Ford"; } } 
} 

이제 자신의 각각의 값이 다른 ICar 인스턴스의 수를 반환 할 수 :

장점

은 매우 분명하다, 다음 코드를 고려하십시오.

하지만 인터페이스를 사용하는 주된 이유는 잘 알려진 계약서에서 어셈블리간에 공유 될 수 있기 때문에 누군가 ICar을 전달할 때 아무 것도 알지 못하지만 실제로는 알 수 있습니다. a Make. 또한 공용 인터페이스를 제외하고는 아무 것도 실행할 수 없습니다. 따라서 Mustang에 이라는 public 구성원이있는 경우 인터페이스에없는 경우 해당 구성원을 알 수 없습니다.

+0

인터페이스의 인스턴스를 만들 수 없기 때문에 매우 혼란 스럽지만 인터페이스 인스턴스를 반환 할 수 있습니다. 인터페이스를 구현 한 객체의 인스턴스를 반환한다는 의미였습니까? –

관련 문제