다음을 통해 공유


Office 솔루션에서 런타임에 바인딩

Office 응용 프로그램의 개체 모델에 있는 일부 형식은 런타임에 바인딩 기능을 통해 사용할 수 있는 기능을 제공합니다. 예를 들어, 일부 메서드와 속성은 Office 응용 프로그램의 컨텍스트에 따라 다른 형식의 개체를 반환할 수 있으며 일부 형식은 컨텍스트에 따라 다른 메서드나 속성을 노출할 수도 있습니다.

적용 대상: 이 항목의 정보는 Microsoft Office 2010 및 2007 Microsoft Office system의 문서 수준 프로젝트 및 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

Option Strict가 해제된 Visual Basic 프로젝트와 .NET Framework 4를 대상으로 하는 Visual C# 프로젝트는 이러한 런타임에 바인딩 기능을 채택하는 형식을 사용하는 경우 다르게 작동할 수 있습니다. Option Strict가 설정된 Visual Basic 프로젝트와 .NET Framework 3.5를 대상으로 하는 Visual C# 프로젝트는 캐스팅이나 리플렉션을 사용하여 이러한 형식을 사용해야 합니다.

개체 반환 값의 암시적 및 명시적 캐스팅

Microsoft Office PIA(주 interop 어셈블리)의 많은 메서드 및 속성은 몇 가지 형식의 개체를 반환할 수 있기 때문에 Object 값을 반환합니다. 예를 들어, ActiveSheet 속성은 해당 반환 값이 활성 시트에 따라 Worksheet 또는 Chart 개체일 수 있기 때문에 Object를 반환합니다.

메서드나 속성이 Object를 반환하는 경우, 이 개체를 Option Strict가 설정된 Visual Basic 프로젝트와 .NET Framework 3.5를 대상으로 하는 Visual C# 프로젝트에서 올바른 형식으로 명시적으로 변환(Visual Basic의 경우)하거나 캐스팅(C#의 경우)해야 합니다. Option Strict가 해제된 Visual Basic 프로젝트와 .NET Framework 4를 대상으로 하는 Visual C# 프로젝트에서는 Object 반환 값을 명시적으로 캐스팅할 필요가 없습니다.

대부분의 경우 참조 문서에 Object를 반환하는 멤버에 대한 가능한 반환 값의 형식이 나와 있습니다. 개체를 변환하거나 캐스팅하면 코드 편집기에서 해당 개체에 대한 IntelliSense를 사용할 수 있습니다.

Visual Basic에서의 변환에 대한 자세한 내용은 암시적 변환과 명시적 변환(Visual Basic)CType 함수(Visual Basic)를 참조하십시오. Visual C#에서의 캐스팅에 대한 자세한 내용은 캐스팅 및 형식 변환(C# 프로그래밍 가이드)() 연산자(C# 참조)를 참조하십시오.

예제

다음 코드 예제에서는 Option Strict가 설정된 Visual Basic 프로젝트와 .NET Framework 3.5를 대상으로 하는 Visual C# 프로젝트에서 특정 형식으로 개체를 캐스팅하는 방법을 보여 줍니다. 이러한 형식의 프로젝트에서는 Cells 속성을 Range로 명시적으로 캐스팅해야 합니다. 이 예제를 실행하려면 Sheet1이라는 워크시트 클래스가 포함된 문서 수준 Excel 프로젝트가 있어야 합니다.

Dim castRange As Excel.Range = CType(Globals.Sheet1.Cells(1, 1), Excel.Range)
Excel.Range castRange = (Excel.Range)Globals.Sheet1.Cells[1, 1];

다음 코드 예제에서는 Option Strict가 해제된 Visual Basic 프로젝트와 .NET Framework 4를 대상으로 하는 Visual C# 프로젝트에서 특정 형식으로 개체를 암시적으로 캐스팅하는 방법을 보여 줍니다. 이러한 형식의 프로젝트에서는 Cells 속성이 Range로 암시적으로 캐스팅됩니다. 이 예제를 실행하려면 Sheet1이라는 워크시트 클래스가 포함된 문서 수준 Excel 프로젝트가 있어야 합니다.

Dim dynamicRange As Excel.Range = Globals.Sheet1.Cells(1, 1)
Excel.Range dynamicRange = Globals.Sheet1.Cells[1, 1];

런타임에 바인딩을 통해서만 사용할 수 있는 멤버 액세스

Office PIA의 일부 속성과 메서드는 런타임에 바인딩을 통해서만 사용할 수 있습니다. Option Strict가 해제된 Visual Basic 프로젝트나 .NET Framework 4를 대상으로 하는 Visual C# 프로젝트에서는 이러한 언어의 런타임에 바인딩 기능을 사용하여 런타임에 바인딩되는 멤버에 액세스할 수 있습니다. Option Strict가 설정된 Visual Basic 프로젝트나 .NET Framework 3.5를 대상으로 하는 Visual C# 프로젝트에서는 리플렉션을 사용하여 이러한 멤버에 액세스해야 합니다.

예제

다음 코드 예제에서는 Option Strict가 해제된 Visual Basic 프로젝트나 .NET Framework 4를 대상으로 하는 Visual C# 프로젝트에서 런타임에 바인딩되는 멤버에 액세스하는 방법을 보여 줍니다. 이 예제에서는 Word에 있는 파일 열기 대화 상자의 런타임에 바인딩되는 Name 속성에 액세스합니다. 이 예제를 사용하려면 Word 프로젝트의 ThisDocument 또는 ThisAddIn 클래스에서 이 예제를 실행하십시오.

Private Sub TestDynamicDialog()
    Dim dialog As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
    dialog.Name = "Testing"
    dialog.Show()
    MessageBox.Show(dialog.Name)
End Sub
dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
dialog.Name = "Testing";
dialog.Show();
MessageBox.Show(dialog.Name);

다음 코드 예제에서는 Option Strict가 설정된 Visual Basic 프로젝트나 .NET Framework 3.5를 대상으로 하는 Visual C# 프로젝트에서 리플렉션을 사용하여 동일한 작업을 수행하는 방법을 보여 줍니다.

Dim dlg As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
Dim dlgType As Type = GetType(Word.Dialog)

' Set the Name property of the dialog box.
dlgType.InvokeMember("Name", _
    Reflection.BindingFlags.SetProperty Or _
        Reflection.BindingFlags.Public Or _
        Reflection.BindingFlags.Instance, _
    Nothing, dlg, New Object() {"Testing"}, _
    System.Globalization.CultureInfo.InvariantCulture)

' Display the dialog box.
dlg.Show()

' Show the Name property.
MessageBox.Show(dlgType.InvokeMember("Name", _
    Reflection.BindingFlags.GetProperty Or _
        Reflection.BindingFlags.Public Or _
        Reflection.BindingFlags.Instance, _
    Nothing, dlg, Nothing, _
    System.Globalization.CultureInfo.InvariantCulture))
Word.Dialog dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
System.Type dialogType = typeof(Word.Dialog);

// Set the Name property of the dialog box.
dialogType.InvokeMember("Name", 
    System.Reflection.BindingFlags.SetProperty | 
        System.Reflection.BindingFlags.Public | 
        System.Reflection.BindingFlags.Instance,
    null, dialog, new object[] { "Testing" },
    System.Globalization.CultureInfo.InvariantCulture);

// Display the dialog box.
dialog.Show(ref missing); 

// Show the Name property.
MessageBox.Show(dialogType.InvokeMember("Name",
    System.Reflection.BindingFlags.GetProperty |
        System.Reflection.BindingFlags.Public |
        System.Reflection.BindingFlags.Instance,
    null, dialog, null,
    System.Globalization.CultureInfo.InvariantCulture).ToString());

참고 항목

참조

Option Strict 문

리플렉션(C# 및 Visual Basic)

개념

Office 솔루션에서 코드 작성

Office 솔루션의 선택적 매개 변수

기타 리소스

dynamic 형식 사용(C# 프로그래밍 가이드)

Office 솔루션 디자인 및 만들기