2012-10-16 4 views
1

Skeet's article을 읽은 후, 내가하는 일반적인 조언을했다 "는 상속 계층 구조를 통해 때 몇 가지 방법을 이름을 변경 ..consider 과부하의 정도를 줄일 수 있습니다.이 조언을 두 번 간다 .."일반적인 과부하 모호성

그러나 좀 더 모호함을 이해하고 싶습니다. (과부하를 지킬 수 있는지 확인하십시오.)

다양한보기 모델을 필요로하는 지루한 테스트 부분을 완성하는 데 도움이되는 테스트 도우미 일뿐입니다. 먼저 유효하거나 유효하지 않은 상태가됩니다.

상속 관계가없는 두 뷰 모델에서이 헬퍼를 사용하기 시작했으며 잘 작동했습니다.

다른 뷰 모델 유형의 기본 클래스 인 ViewModelWrapper의 또 다른 oveload에 유용 할 것으로 결정했습니다. 그래서 컴파일러는 이전에 VmWrapper의 하위 클래스에 사용할 확장을 알지 못한다고 불평했습니다.

그래서이 경우 3 번째 오버로드와 1 번째 코드가됩니다. 내가 암시 하듯이, 나는 이미 과부하를 없앴다. 그러나

내가 과부하로 일하는 것을 어떻게 볼 수 있겠는가?

건배,
Berryl

// SatVm 
public static void MakeValid<TParentModel, TModel>(this ISatelliteVm<TParentModel, TModel> instance, IEntityValidator validator) {...} 

// HubVm 
public static void MakeValid<TParentModel>(this HubViewModel<TParentModel> instance, IEntityValidator validator, bool bValid = true) 
where TParentModel : Entity { ... } 

// VmWrapper  
public static void MakeValid<TModel>(this ViewModelWrapper<TModel> instance, IEntityValidator validator) { ... } 

답변

2

당신은 단순히 VM의 유형으로 확장의 각 세트에 대해 별도의 네임 스페이스를 사용할 수 있습니다.

namespace Extensions.Satellite 
{ 
    // SatVm 
    public static void MakeValid<TParentModel, TModel>(this ISatelliteVm<TParentModel, TModel> instance, IEntityValidator validator) {...} 
} 

namespace Extensions.Hub 
{ 
    // HubVm 
    public static void MakeValid<TParentModel>(this HubViewModel<TParentModel> instance, IEntityValidator validator, bool bValid = true) 
     where TParentModel : Entity { ... } 
} 

namespace Extensions.Wrapper 
{ 
    // VmWrapper  
    public static void MakeValid<TModel>(this ViewModelWrapper<TModel> instance, IEntityValidator validator) { ... } 
} 

올바른 네임 스페이스를 사용하십시오.

관련 뉴스에서는이를 체크 아웃 할 수 있습니다 : Overriding Extension Methods

+0

이 미안, 해킹처럼 보인다. – Adam