2011-10-18 6 views
0

내 프로그램의 일부 위치에서는 개체 (Test)의 구체적인 구현에 액세스해야하며 다른 위치에서는 읽기 전용 인터페이스 (ITest) 만 필요합니다. 이는 사용자가 모든 속성을 설정하고 수정할 수 있다고 가정하지 못하도록하기위한 것입니다.명시 적 인터페이스 구현 및 다중 인터페이스

예를 들어 사용자가 TestFactory.Search를 호출하면 반환 된 컬렉션이 속성 A를 수정하지 못하며 CollectionB를 사용하지 못하게됩니다 (함수 내에서 설정되지 않음).). 개체 이니셜 라이저를 사용할 수 있고 속성 이름을 동일하게 유지하고 싶습니다.

public interface IReadOnly 
{ 
    int Id{ get; } 
    string Name{ get; } 
} 

public class ClassA : IReadOnly 
{ 
    int Id{ get; internal set; } 
    string Name{ get; set; } 
} 

public interface ITest 
{ 
    int Id{ get; } 
    IReadOnly A { get; } 
} 

public class Test : ITest 
{ 
    private ClassA classA = new ClassA(); 

    int Id{ get; internal set; } 
    IReadOnly ITest.A{ get{ return classA; } } 
    public ClassA A 
    { 
     get 
     { 
      return classA; 
     } 
     set 
     { 
      classA = value; 
     } 
    } 

    public IEnumerable<string> CollectionB {get;set;} 
} 

public static class TestFactory 
{ 
    IEnumerable<ITest> Search(){ /**/ } 
    Test Read(){ /**/ }; 
} 

이 문제를 해결하기 위해 더 나은 방법이 있나요 및 명시 적 인터페이스 구현의 개념을 남용이다 : 나는 다음과 같은 해결책을 가지고 있습니다?

+0

'Test' 클래스가'IReadOnly'을 구현하고'test IReadOnly'를 사용하자.'test' – sll

답변

0

대신 추상 클래스를 만든 다음 전체 액세스 및 읽기 전용 동작을 하위 클래스로 만들 수 있습니까?

1

나는 당신의 Test 클래스에 IReadOnly와 ITest의 두 인터페이스를 구현하게 할 것이다. Setter 액세스를 제한하려면 IReadOnly로 캐스트하고, 그렇지 않으면 ITest 또는 콘크리트 테스트를 사용하십시오.

관련 문제