Excel VSTO에서 "응용 프로그램" 인터페이스를 인스턴스화할 수 있는 이유를 설명하십시오.
제 애플리케이션에 다음과 같은 C# 코드가 있는데 잘 작동합니다.Excel의 새 인스턴스를 시작합니다.
private readonly Microsoft.Office.Interop.Excel.Application _application;
_application = new Microsoft.Office.Interop.Excel.Application();
_application.Visible = true;
응용프로그램이 인터페이스 유형이라는 것을 최근에야 알게 되었습니다.정확히 무슨 일이 일어나고 있고 어떻게 그것이 가능합니까?
컴파일러를 사용하면 인터페이스를 구현하는 구체적인 클래스(및 )를 식별하는 속성으로 장식된 경우 인터페이스를 인스턴스화할 수 있습니다.인터페이스를 인스턴스화하면 실제로 이 구체적인 클래스를 백그라운드에서 인스턴스화하게 됩니다.
이 "기능"은 COM에서 가져온 유형의 배관으로 사용하기 위한 것입니다.Outlook 인터페이스가 다음과 같은 이름의 구체적인 클래스에 의해 지원되는 방식에 주목합니다.
[GuidAttribute("00063001-0000-0000-C000-000000000046")]
[CoClassAttribute(typeof(ApplicationClass))]
public interface Application : _Application, ApplicationEvents_11_Event
대부분의 경우 이러한 특성을 자신의 인터페이스에 적용하지 않아야 합니다.그러나 시연을 위해 컴파일러가 코드의 인터페이스를 인스턴스화하는 데 이 가능성을 활용할 수 있음을 보여줄 수 있습니다.다음과 같은 간단한 예를 생각해 보십시오(GUID는 임의입니다).
[ComImport]
[Guid("175EB158-B655-11E1-B477-02566188709B")]
[CoClass(typeof(Foo))]
interface IFoo
{
string Bar();
}
class Foo : IFoo
{
public string Bar()
{
return "Hello world";
}
}
위의 선언을 사용하여 자신만의 인스턴스를 만들 수 있습니다.IFoo
인터페이스:
IFoo a = new IFoo();
Console.WriteLine(a.Bar());
// Output: "Hello world"
편집: jonnyGold가 Excel 인스턴스가 다음으로 장식되지 않은 것으로 올바르게 표시되지만CoClass
MSDN에서, 이것은 MSDN 누락으로 보입니다.의 디컴파일된 서명은Microsoft.Office.Interop.Excel
어셈블리:
[CoClass(typeof(ApplicationClass)), Guid("000208D5-0000-0000-C000-000000000046")]
[ComImport]
public interface Application : _Application, AppEvents_Event
MSDN이 그렇게 말했기 때문입니다.
예를 들어 다음 코드는 Excel Microsoft를 사용합니다.사무실. 인터럽트.Excel. 응용 프로그램 인터페이스.실행 시 응용 프로그램 클래스를 사용하여 Excel 응용 프로그램 개체를 인스턴스화하고 워크시트를 엽니다.
언급URL : https://stackoverflow.com/questions/11039064/please-explain-why-i-am-able-to-instantiate-the-application-interface-in-excel
'programing' 카테고리의 다른 글
가져오기 org.apache.poi.xssf를 확인할 수 없습니다. (0) | 2023.07.08 |
---|---|
사전이 비어 있는지 확인하는 방법은? (0) | 2023.07.08 |
Oracle SQL에서 '@' 기호의 의미는 무엇입니까? (0) | 2023.07.08 |
모든 (경량) 태그 생성 날짜를 표시하는 git 명령 (0) | 2023.07.08 |
웹 사이트 IISHRESULT: 0x80070020을(를) 시작할 수 없습니다. (0) | 2023.07.08 |