2013-05-15 4 views
3

Excel 14.0 라이브러리를 사용하여 C#으로 Excel을 프로그래밍 할 때 동일한 이름을 가진 인터페이스가 하나 있지만 이름 앞에 밑줄이 있습니다. 예를 들면 다음과 같습니다.C#의 Excel 인터페이스 이름 앞에있는 밑줄 문자의 의미는 무엇입니까?

_Workbook 
Workbook 

_Worksheet 
Worksheet 

_Application 
Application 

etc 

이유는 무엇이며 밑줄은 무엇을 의미합니까? 내가 보게되는 대부분의 샘플 코드는 밑줄이있는 인터페이스 이름을 요구합니다.

+3

Jon Skeet의 소식? 그는 심지어 알지도 못합니다 (http://stackoverflow.com/questions/1051464/excel-interop-worksheet-or-worksheet). 닫으려고 투표. – nawfal

+0

그건 말도 안돼. –

답변

-2

접근 할 때 접근 자의 처음이나 끝에있는 밑줄은 일반적으로 사기성의 외형이 강한 API를 나타냅니다.

+1

정말요? "일반적으로"? –

+0

이 경우 모두 공개 인터페이스입니다. –

6

MSDN을 살펴보십시오. 그게 다야 - 예를 Workbook를 들어

[GuidAttribute("000208DA-0000-0000-C000-000000000046")] 
public interface Workbook : _Workbook, 
    WorkbookEvents_Event 

그래서 Workbook 많은 이벤트 핸들러가 추가되는 것을 의미한다 WorkbookEvents_Event에서 방법과 _Workbook를 확장합니다.

나머지 인터페이스는 유사합니다.

3

OLE 자동화에서 오래된 규칙은 프로그래머가 인터페이스 형식을 숨겨야한다는 것을 나타냅니다. 스크립팅 언어와 VB6 및 VBA와 같은 언어에서는 인터페이스 유형 대신 기본 인터페이스를 사용합니다.

2

확대하려면 Garath's observation 워크 북은 _Workbook과 WorkbookEvents_Event의 조합입니다.

기본적으로 _Workbook 인터페이스는 Excel에서 구현되며 WorkbookEvents_Event 인터페이스는 발생시키는 이벤트입니다.

COM에서 WorkbookEvents_Event는 원본 인터페이스이며 에 대한 메서드 서명을 실제로 정의합니다. 클라이언트을 이벤트 싱크 (일명 이벤트 핸들러)로 등록합니다. 통합 문서 인터페이스는 함께 묶는 실제 코 클래스 (COM 클래스)입니다.이 클래스는 _Workbook 메서드를 제공하며 WorkbookEvents_Event의 원본입니다.

COM에서 _Workbook 인터페이스는 IUnknown :: QueryInterface (Excel과 상호 작용하는 방식) 호출에서 반환되며 WorkbookEvents_Event는 IConnectionPoint :: GetConnectionInterface에서 반환됩니다. 차례로 통합 문서의 "이벤트"(COM 통화의 연결 지점)에 가입하려면 WorkbookEvents_Event 구현을 IConnectionPoint :: Advise에 전달하여 Excel이 이벤트 발생시 호출하도록합니다.

.NET으로 변환되면 이러한 원본 인터페이스는 대부분 의미를 잃어 버리고 구현 세부 사항이됩니다. 강력한 형식의 대리자는 작업을 단순화하고 COM interop은 모든 자동 인터페이스 매직을 자동화합니다.

대부분의 경우 Office interop (Workbook) 용 coclass 인터페이스를 사용하는 것만으로도 .NET 모델에 가장 적합하고 가장 근접합니다. 그러나 NB는 다른 공급 업체가 향후 버전 관리를 위해 생성 된 인터페이스 (통합 문서) 대신 실제 래퍼 (예 : WorkbookClass)의 사용을 권장하는 것을 보았습니다. 솔직하게 말하면, 나는 (고맙게도) 어떤 방향으로가는 파급 효과를 생각할 필요가 전혀 없었다.

아, 밑줄은 주로 규칙과 클래스 이름이 지정된 COM 인터페이스 이름을 생성하는 편리한 방법입니다. VB6에서는 해당 규칙을 사용하는 클래스에 대해 COM 인터페이스를 만듭니다 (예 : Workbook 클래스가있는 경우 COM 인터페이스 _Workbook을 내보냄). 잘못된 VB6 이름이므로 VB6이 해당 규칙을 사용합니다.일반적으로 잘못된 밑줄은 유효하지 않은 식별자 (VB6) 또는 예약 된 (C++)이므로 자동 생성 된 편리한 이름을 나타냅니다.

관련 문제