TL; DR - 사용Child
오버Parent
지역 범위가 바람직하다. 가독성을 높이는 데 도움이 될뿐만 아니라 오버로드 된 분석법 해결이 제대로 작동하고 효율적인 컴파일이 가능하도록해야합니다.
로컬 범위에서
Parent obj = new Child(); // Works
Child obj = new Child(); // Better
var obj = new Child(); // Best
개념적으로 가능한 가장 많은 유형 정보를 유지하는 것입니다. 로 다운 그레이드하면 Parent
기본적으로 유용 할 수있는 유형 정보를 제거합니다.
완전한 유형 정보를 유지하면 다음과 같은 네 가지 주요 이점이 있습니다.
- 컴파일러에 자세한 정보를 제공합니다.
- 독자에게 더 많은 정보를 제공합니다.
- 보다 깨끗하고 표준화 된 코드.
- 프로그램 논리를 더 변경 가능하게 만듭니다.
장점 1 : 컴파일러에 대한 추가 정보
명백한 유형은 오버로드 된 분석법 해결 및 최적화에 사용됩니다.
예 : 과부하 된 분석법 해결
main()
{
Parent parent = new Child();
foo(parent);
Child child = new Child();
foo(child);
}
foo(Parent arg) { /* ... */ } // More general
foo(Child arg) { /* ... */ } // Case-specific optimizations
위의 예제에서 두 foo()
호출 은 모두 작동 하지만 어떤 경우에는 오버로드 된 메소드 분석이 더 좋습니다.
예 : 컴파일러 최적화
main()
{
Parent parent = new Child();
var x = parent.Foo();
Child child = new Child();
var y = child .Foo();
}
class Parent
{
virtual int Foo() { return 1; }
}
class Child : Parent
{
sealed override int Foo() { return 2; }
}
위의 예제에서 두 .Foo()
호출은 결국 override
을 반환 하는 동일한 메소드를 호출 합니다 2
. 첫 번째 경우에는 올바른 방법을 찾기위한 가상 방법 검색이 있습니다. 이 가상 메소드 조회는 해당 메소드 이후의 두 번째 경우에는 필요하지 않습니다 sealed
.
그의 대답에 비슷한 예를 제공 한 @Ben에게 감사의 말을 전한다 .
장점 2 : 독자에게 더 많은 정보
정확한 유형을 알고 Child
있으면 (예 :) 코드를 읽는 사람에게 더 많은 정보를 제공하여 프로그램이 수행하는 작업을 쉽게 확인할 수 있습니다.
물론, 어쩌면 모두 이후 실제 코드에 중요하지 않습니다 parent.Foo();
및 child.Foo();
메이크업 감각, 그러나 처음으로 코드를 보는 사람, 자세한 내용은 그냥 일반 도움이됩니다.
또한, 개발 환경에 따라 IDE에 대한 추가 도움이 툴팁 및 메타 데이터를 제공 할 수 있습니다 Child
보다 Parent
.
장점 3 :보다 깨끗하고 표준화 된 코드
최근에 보았던 C # 코드 예제의 대부분 var
은 기본적으로 축약 형입니다 Child
.
Parent obj = new Child(); // Sub-optimal
Child obj = new Child(); // Optimal, but anti-pattern syntax
var obj = new Child(); // Optimal, clean, patterned syntax "everyone" uses now
var
선언 이 아닌 진술을 보는 것은 단지 외모입니다. 상황에 맞는 이유가 있다면 대단하지만 그렇지 않으면 반 패턴으로 보입니다.
// Clean:
var foo1 = new Person();
var foo2 = new Job();
var foo3 = new Residence();
// Staggered:
Person foo1 = new Person();
Job foo2 = new Job();
Residence foo3 = new Residence();
장점 4 : 프로토 타이핑을위한 더 가변적 인 프로그램 로직
처음 세 가지 장점은 큰 장점이었습니다. 이것은 훨씬 더 상황이 좋지 않습니다.
아직도, 다른 사람들이 Excel을 사용하는 것처럼 코드를 사용하는 사람들을 위해 우리는 끊임없이 코드를 변경하고 있습니다. 이 버전의 코드 Child
에서 고유 한 메소드를 호출 할 필요는 없지만 나중에 코드의 용도를 변경하거나 재 작업 할 수 있습니다.
강력한 유형 시스템의 장점은 프로그램 논리에 대한 특정 메타 데이터를 제공하여 가능성을보다 쉽게 알 수 있다는 것입니다. 이것은 프로토 타이핑에 매우 유용하므로 가능하면 유지하는 것이 가장 좋습니다.
개요
사용 Parent
과부하 방법 해상도 엉망을 일부 컴파일러 최적화 억제 리더의 정보를 제거하고 코드 못 생겼다고한다.
사용하는 var
것은 실제로 갈 길입니다. 빠르고 깨끗하며 패턴 화되어 있으며 컴파일러와 IDE가 작업을 올바르게 수행하도록 도와줍니다.
중요 :이 답변에 관한Parent
대Child
방법의 로컬 범위이다. Parent
vs.의 문제는Child
반환 유형, 인수 및 클래스 필드에서 매우 다릅니다.