Office 솔루션에서 런타임에 바인딩
Office 애플리케이션 내의 개체 모델의 일부 형식은 런타임에 바인딩 기능을 통해 사용할 수 있는 기능을 제공합니다. 예를 들어 일부 메서드 및 속성은 Office 애플리케이션의 컨텍스트에 따라 다른 형식의 개체를 반환할 수 있으며, 일부 형식은 다른 컨텍스트에서 다른 메서드 또는 속성을 노출할 수 있습니다.
적용 대상: 이 항목의 정보는 문서 수준 프로젝트 및 VSTO 추가 기능 프로젝트에 적용됩니다. Office 애플리케이션 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하세요.
Option Strict가 꺼져 있는 Visual Basic 프로젝트와 .NET Framework 4 또는 .NET Framework 4.5를 대상으로 하는 Visual C# 프로젝트는 이러한 런타임에 바인딩 기능을 사용하는 형식에서 직접 작업할 수 있습니다.
개체 반환 값의 암시적 캐스팅 및 명시적 캐스팅
Microsoft Office PIA(주 interop 어셈블리)의 많은 메서드와 속성은 여러 가지 유형의 개체를 반환할 수 있으므로 Object 값을 반환합니다. 예를 들어 ActiveSheet 속성은 현재 시트의 내용에 따라 반환 값이 Worksheet 또는 Chart 개체일 수 있기 때문에 Object를 반환합니다.
메서드 또는 속성이 Object를 반환하는 경우 Option Strict가 켜진 Visual Basic 프로젝트에서 개체를 올바른 형식으로 명시적으로 변환해야 합니다(Visual Basic에서). Option Strict가 꺼진 Visual Basic 프로젝트에서 Object 반환 값을 명시적으로 캐스팅 할 필요는 없습니다.
대부분의 경우 참조 설명서에는 Object를 반환되는 멤버에 대한 반환 값의 가능한 형식이 나열됩니다. 개체를 변환하거나 캐스팅하면 코드 편집기에서 개체에 대한 IntelliSense를 사용할 수 있습니다.
Visual Basic의 변환에 대한 자세한 내용은 암시적 변환과 명시적 변환(Visual Basic) 및 CType 함수(Visual Basic)를 참조하세요.
예제
다음 코드 예제에서는 Option Strict가 켜진 Visual Basic 프로젝트의 특정 형식으로 개체를 캐스팅하는 방법을 보여 줍니다. 이 유형의 프로젝트에서는 명시적으로 Cells 속성을 Range로 캐스팅 해야 합니다. 이 예제에는 Sheet1
이라는 워크시트 클래스가 포함된 문서 수준 프로젝트가 필요합니다.
Dim castRange As Excel.Range = CType(Globals.Sheet1.Cells(1, 1), Excel.Range)
다음 코드 예제에서는 Option Strict가 꺼진 Visual Basic 프로젝트의 특정 형식 또는 .NET Framework 4를 대상으로 하는 Visual C# 프로젝트에서 개체를 암시적으로 캐스팅하는 방법을 보여 줍니다. 이러한 유형의 프로젝트에서 Cells 속성은 암시적으로 Range에 캐스팅합니다. 이 예제에는 Sheet1
이라는 워크시트 클래스가 포함된 문서 수준 프로젝트가 필요합니다.
런타임에 바인딩을 통해서만 사용할 수 있는 액세스 멤버
Office PIA의 일부 속성 및 메서드는 런타임에 바인딩을 통해서만 사용할 수 있습니다. Option Strict가 꺼져 있거나 .NET Framework 4 또는 .NET Framework 4.5를 대상으로 하는 Visual C# 프로젝트에서 이러한 언어의 런타임에 바인딩 기능을 사용하여 런타임에 바인딩된 멤버에 액세스할 수 있습니다. Option Strict가 켜진 Visual Basic 프로젝트에서는 리플렉션을 사용하여 이러한 멤버에 액세스해야 합니다.
예제
다음 코드 예제에서는 Option Strict가 꺼져 있거나 .NET Framework 4를 대상으로 하는 Visual C# 프로젝트에서 런타임에 바인딩된 멤버에 액세스하는 방법을 보여 줍니다. 다음은 Word에서 파일 열기 대화 상자의 런타임에 바인딩된 Name 속성에 액세스하는 예제입니다. 이 코드 예제를 사용하려면 Word 프로젝트의 ThisDocument
또는 ThisAddIn
클래스에서 실행합니다.
dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
dialog.Name = "Testing";
dialog.Show();
MessageBox.Show(dialog.Name);
다음 코드 예제에서는 리플렉션을 사용하여 Option Strict가 켜진 Visual Basic 프로젝트에서 동일한 작업을 수행하는 방법을 보여 줍니다.
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))