클래스가 인터페이스를 구현할 때 클래스 자체를 통해 또는 인터페이스를 통해 속성과 메서드에 액세스하는 것이 더 낫습니까?C# 인터페이스 대 클래스 액세스
1
A
답변
9
인터페이스를 사용하면 클래스를 분리하여 나중에 테스트 할 수 있습니다. 나중에 테스트 할 필요가 없거나 동일한 인터페이스에서 상속받은 다른 클래스를 전달할 가능성이없는 경우 클래스 메서드를 사용하는 것이 정상입니다. 특히 System.Collections.Generic.List와 같은 기본 클래스의 경우 먼저 LINQ 쿼리를 수행 할 때마다 IEnumerable로 캐스팅하지 않으려합니다.
3
나는이 모든 것이 당신이 행동하는 대상에 대해 무엇을 알고 있는지에 달려 있다고 생각합니다. 내가 바즈 myBaz 가지고있는 경우에
public class Bar : ICommon
public class Baz : ICommon
가정, 다음에 작용하기 전에 ICommon에 캐스팅 할 필요가 없습니다.
가능한 가장 높은 추상화 수준에서 작업하십시오. 리팩토링이 쉬워지며 코드 재사용이 크게 향상됩니다. 즉
Bar myBar = new Bar();
Baz myBaz = new Baz();
doSomething(myBar);
doSomething(myBaz);
public void doSomething(ICommon parameter)
{
parameter.DoICommonThing(); // working on object reference of type ICommon.
}
, 발신자가 (실제 전달 된 매개 변수)가 어떤 줄 수 있도록, 가장 일반적인 유형 (메소드 서명에서 즉, 프로토 타입 매개 변수)을 부탁드립니다.
관련 문제
- 1. 클래스 대 인터페이스
- 2. C# 속성 액세스 대 인터페이스 구현
- 3. 인터페이스 대 콘크리트 클래스
- 4. 인터페이스 인스턴스화 대 클래스 인스턴스화
- 5. 클래스 대 인터페이스 FindBugs 및 CheckForNull
- 6. PHP 추상 클래스 대 인터페이스 (성능)
- 7. 는 C++/CLI 인터페이스 클래스
- 8. Managed C++의 인터페이스 클래스
- 9. C# 메서드 오버로드 대 인터페이스 매개 변수
- 10. 인터페이스, 정적 클래스 문제
- 11. 인터페이스 대 열거 형
- 12. 인터페이스 대 IoC/DI
- 13. C++ 컨테이너/배열/튜플 일관된 액세스 인터페이스
- 14. C#의 인터페이스 멤버에 대한 액세스 한정자
- 15. 컬렉션/컨테이너 용 C++ 인터페이스/수퍼 클래스
- 16. C# 부분 클래스 및 COM 인터페이스
- 17. C++ 클래스 (인터페이스)에 속성을 제공하는 방법
- 18. C# 인터페이스/추상 클래스 (동적 유형 포함)
- 19. 형식 매개 변수에 대한 제약 조건 : 인터페이스 대 추상 클래스
- 20. FormatProvider 대 확장 메서드 대 새로운 클래스
- 21. C++ 클래스 액세스/조작에 관한 C
- 22. XML 대 SQlite 대 액세스
- 23. Objective-C : 클래스 대 인스턴스 메서드?
- 24. 클래스 및 인터페이스
- 25. 추상 클래스 및 인터페이스
- 26. 인터페이스 유형에서 클래스 검색
- 27. 클래스 인터페이스 디자인의 어려움
- 28. 인터페이스 내부 클래스?
- 29. 템플릿 클래스 용 인터페이스
- 30. 서비스 클래스 인터페이스?