2009-09-16 6 views
2
  1. from MSDN 다음하지 않았다 : ClassInterfaceType.None의 필요성?

    ClassInterfaceType.None

    더 클래스 인터페이스는 클래스에 대해 생성 없음을 나타냅니다. 인터페이스가 명시 적으로 구현되지 않은 경우 클래스는 IDispatch 인터페이스를 통해 늦은 접속 액세스 만 제공 할 수 있습니다. ClassInterfaceAttribute에 대해 으로 설정하는 것이 좋습니다. 을 사용하면 인터페이스를 통해 기능을 노출하는 유일한 방법은 클래스에 의해 명시 적으로 구현되었습니다.

  2. [ComVisible(true)]은 COM 가시성을 위해 필수입니까?

답변

7

첫 번째 문제의 설명은 this blog post을 참조하십시오. 요점은 ClassInterfaceType.None을 지정하지 않으면 여분의 인터페이스가 생성되고 메서드의 순서를 변경하거나 서명을 변경하거나 그 중 일부를 제거하면 이진 호환성 문제가 발생할 수 있다는 것입니다. 훨씬 더 나은 대안은 명시 적으로 인터페이스를 정의하고 클래스를 상속 받아 ClassInterfaceType.None을 지정하는 것입니다.

ComVisible(true)은 COM 가시성을위한 필수 요소는 아닙니다. 기본적으로 public 클래스의 모든 public 메서드와 모든 public 클래스는 COM으로 표시되며 다른 모든 엔터티는 COM으로 표시되지 않습니다. 이를 변경하려면 ComVisible 속성을 사용하십시오. 일반적으로 COM 표시 클래스의 수를 줄이려면 모든 COM 표시 클래스 레지스트리 항목과 유형 라이브러리 항목이 생성되므로 불필요한 레지스트리 오염이 발생하고 유형 라이브러리가 부 풀립니다. IMO 모든 공개 엔티티에 ComVisible을 명시 적으로 표시하는 것이 좋습니다.

관련 문제