2011-07-07 2 views
0

와 제네릭이 아닌 인터페이스 속성을 재정 내가 좋아하는 두 개의 인터페이스를 가지고 다음과 같은 : 나는 클래스를 구현할 때일반적인 하나

public interface IEntityViewModel<T> : IEntityViewModel where T : class, ICLEntity 
{ 
    new T Entity { get; set; } 
} 

public interface IEntityViewModel 
{   
    void LoadEntity(int primaryKey); 
    bool? DialogResult { get; set; } 
    ICLEntity Entity { get; set; }   
} 

가 어떻게 클래스에 표시되는 엔터티 속성이 있는지 확인 할 수 있습니다 일반 T?

ICLEntity IEntityViewModel.Entity 
    { 
     get 
     { 
      return ActiveItem.Entity; 
     } 
     set 
     { 
      ActiveItem.Entity = value as T; 
     } 
    } 

하지만 내가 필요하지 않은 클래스에 두 개의 엔티티 속성을 얻을 :

public abstract class EntityConductor<T> : IEntityViewModel<T> 
    where T : class, ICLEntity 
    { 
     public T Entity 
     { 
      get; set; 
     } 
    } 

컴파일러 내가 예를 들어,뿐만 아니라 IEntityViewModel 구현을 추가해야합니다 : 다음은 샘플 클래스입니다 . 제네릭 인터페이스를 구현하는 경우 엔 Entity 속성이 T 유형이어야하고 비 generic 일 경우 ICLEntity 유형이어야합니다.

어떻게이 작업을 수행 할 수 있습니까? 나는 간단한 것을 놓치고 있습니까? .NET 4.0을 사용하고 있습니다. 공분산을 사용하면 도움이 될까요?

감사합니다.

답변

0

나는 이것을 할 수 없다고 생각합니다. 당신은 이미 당신이 할 수있는 최선을 다합니다.

public abstract class EntityConductor<T> : IEntityViewModel<T> 
    where T : class, ICLEntity 
{ 
    public T Entity { get; set; } 

    ICLEntity IEntityViewModel.Entity 
    { 
     get { return Entity; } 
     set { Entity = (T)value; } 
    } 
} 

는 IEntityViewModel 작업 할 때 강력한 형식의 속성을 사용하여 객체 있는지 확인해야합니다,하지만 당신 만 알고 있다면 그것은 당신이 약하게 입력 된 속성을 사용하게 될 것이다 IEntityViewModel 객체가 될 수 있습니다. 추가 저장 용량 요구 사항이 없으므로이 문제가 발생하지 않습니다. 이 구조는 사용 시나리오로 보이는 것을 반영합니다. 객체가 있지만 상황에 따라 유형이 정확하지 않은 속성을 사용할 수있는 유형 정보가 없을 수 있습니다.

IEntityViewModel.Entity의 setter는 매개 변수가 잘못된 형식 인 경우 예외를 throw해야합니다.