2009-08-25 4 views
1

나는 현재 효과적인 C 번호를 읽고 매우 혼란 다음 줄을 발견하고 :인터페이스를 사용하여 인터페이스의 const 및 nonconst 버전을 만들 수 있습니까?

마지막으로,하지만 확실히 적어도 할 수 있습니다 CONST를 만들 수 용도의 인터페이스 및 인터페이스의 nonconst 버전 :

인터페이스의 버전과 비 컨스트럭트 버전은 무엇입니까? 그리고 우리는 이것을 어디에서 사용할 것인가?

지원 코드 :

public interface IConstNameValuePair 
{ 
    object Name 
    { 
    get; 
    } 

    object Value 
    { 
    get; 
    } 
} 
public interface INameValuePair 
{ 
    object Value 
    { 
    get; 
    set; 
    } 
} 

// Usage: 
public class Stuff : IConstNameValuePair, INameValuePair 
{ 
    private string _name; 
    private object _value; 

    #region IConstNameValuePair Members 
    public object Name 
    { 
    get 
    { 
     return _name; 
    } 
    } 

    object IConstNameValuePair.Value 
    { 
    get 
    { 
     return _value; 
    } 
    } 

    #endregion 

    #region INameValuePair Members 

    public object Value 
    { 
    get 
    { 
     return _value; 
    } 
    set 
    { 
    _value = value; 
    } 
    } 
    #endregion 
} 
+3

다른 책을 읽는 것이 좋습니다;) –

+0

@Mehrdad 나는이 같은 말도 안되는 질문에 답할만한 자격이 있습니다. 나는 코드를 간과했다. – Sandbox

+3

사실, 이것이이 책의 잘못이라고 생각합니다. 말씨는 꽤 혼란 스럽다. –

답변

3

이러한 인터페이스 중 하나를 통해, 실제로 값을 수정할 수 있음을 보여주고있다합니다 ('설정'속성이 정의되어 있지 않습니다). 실제로이 키워드는 특별한 의미를 지니기 때문에이 'const'를 호출하는 것은 다소 모호합니다. 그러나 그것이 저자의 의미입니다.

+0

멍청한 나. 나는 코드의 일부를 간과했다. 고맙습니다. – Sandbox

1

인터페이스의 버전과 비 컨스트럭트 버전은 무엇입니까?

저는 그가 'const'와 'non-const'를 의미한다고 생각합니다. C++ 프로그래머가 이해할 수있는 방식입니다. 즉, 다음과 같습니다.

'const'인터페이스는 속성을 변경할 수없는 인터페이스입니다. 예를 들어 다음 코드에서 test1 메소드는 stuff 인스턴스의 속성을 가져올 수는 있지만 설정할 수는 없습니다.

'non-const'인터페이스는 속성을 변경할 수있는 인터페이스입니다. 예를 들어 test2 메소드는 설정하고 stuff 인스턴스의 속성을 가져올 수 있습니다.

0

먼저 이름 (const 및 nonconst)의 선택이 매우 열악하다는 것을 분명히해야합니다. Const는 일반적으로 값이 const 개, 즉 변경할 수 없다는 개념을 나타냅니다.

두 인터페이스를 보면 IConstNameValuePair은 get 속성 접근 자만 정의합니다. IConstNameValuePair으로 캐스팅 된 Stuff의 인스턴스가있을 때 인터페이스를 통해 값을 변경할 수있는 방법이 없으므로 인스턴스가 변경 될 수 있습니다.

INameValuePair 인터페이스는 get 및 set 속성 접근자를 모두 정의합니다. INameValuePair으로 캐스팅 된 Stuff의 인스턴스가 있으면 인터페이스를 통해 값을 변경할 수 있기 때문에 효과적으로 인스턴스가 변경 될 수 있습니다.

두 개의 서로 다른 인터페이스를 사용하는 것보다이 문제를 해결하는 방법이 분명 더 좋습니다.

관련 문제