programing

Excel VSTO에서 "응용 프로그램" 인터페이스를 인스턴스화할 수 있는 이유를 설명하십시오.

megabox 2023. 7. 8. 10:47
반응형

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 인스턴스가 다음으로 장식되지 않은 것으로 올바르게 표시되지만CoClassMSDN에서, 이것은 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

반응형