Microsoft VSTO(Visual Studio Tools for Office) 3(C#)에서 매개 변수 전달에 대한 모범 사례

StackOverflow https://stackoverflow.com/questions/73261

문제

VSTO에서 Office 개체 모델과 상호 작용하기 위한 많은 매개 변수에는 매개 변수의 개념적 유형이 int 또는 문자열인 경우에도 참조로 전달되는 개체 매개 변수가 필요합니다.

  1. 코드에서 매개변수를 수정할 수 있도록 이 메커니즘이 사용된다고 가정합니다. 하지만 매개변수를 더 적절한 유형이 아닌 일반 객체로 전달해야 하는 이유를 알 수는 없습니다.누구든지 나에게 깨달을 수 있습니까?
  2. 내가 사용한 메커니즘(도움말 및 MSDN 리소스에서 발췌)은 기본적으로 적절한 데이터를 포함하는 일반 개체를 만든 다음 이를 메서드에 전달합니다. 예를 들면 다음과 같습니다.

    object nextBookmarkName = "NextContent";object nextBookmark = this.Bookmarks.get_Item( ref nextBookmarkName ).Range;

    Microsoft.Office.Interop.Word.Range newRng = this.Range( ref nextBookmark, ref nextBookmark );

이것은 추가 코드가 많은 것처럼 보이지만 더 나은 방법을 찾을 수 없습니다.나는 뭔가를 놓치고 있다고 확신합니다.그것은 무엇입니까?아니면 이것이 정말 최선의 방법일까요?

도움이 되었습니까?

해결책

내 생각에는 원래 Word 개체 모델의 디자인이 좋지 않았던 것 같습니다.참조로 문자열을 전달하는 것이 복사본을 만들 필요가 없기 때문에 COM 세계에서 약간 더 빠를 수 있다는 것을 알고 있으므로 아마도 이것이 정당화의 일부일 것입니다.그러나 단점은 호출 수신자가 값을 수정할 수 있으며 대부분의 경우 Word에서는 입력 매개 변수라는 것입니다.

나는 당신의 기술이 최선의 방법이라고 생각합니다.많은 Word 개체 모델 메서드에 필요한 수백만 개의 선택적 매개 변수의 경우 다음과 같이 "누락된" 단일 정적 필드를 만들 수 있습니다.

개체 누락 = Type.Missing;

// 객체 객체 filename = ...document.saveas (Ref Filename, Ref Missing, Ref Missing, Ref Missing, Ref Missing, Ref Missing, Ref Missing, Ref Missing, Ref Missing, Ref Mission, Ref Missing, Ref Missing, Ref Missing, Ref 없어진);

다른 팁

나는 조의 말에 동의한다.저는 다음과 같은 도우미 구조체와 클래스도 개발했습니다.

internal struct Argument
{
    internal static object False = false;

    internal static object Missing = System.Type.Missing;

    internal static object True = true;
}

그리고 이것:

/// <summary>
/// Defines the "special characters"
/// in Microsoft Word that VSTO 1.x
/// translates into C# strings.
/// </summary>
internal struct Characters
{
    /// <summary>
    /// Word Table end-of-cell marker.
    /// </summary>
    /// <remarks>
    /// Word Table end-of-row markers are also
    /// equal to this value.
    /// </remarks>
    internal static string CellBreak = "\r\a";

    /// <summary>
    /// Word line break (^l).
    /// </summary>
    internal static string LineBreak = "\v";

    /// <summary>
    /// Word Paragraph break (^p).
    /// </summary>
    internal static string ParagraphBreak = "\r";
}

그리고 몇 가지 더...

나도 이것에 관심이 있을 것이다.저는 Word에서 자동화를 사용하는 여러 앱을 코딩하고 있으며 다음과 같은 것도 있습니다.

object oFalse = false, oTrue = true, oOne = 1;

매우 불쾌한 일이지만, 이것이 내가 지금까지 아는 유일한 방법입니다.

내가 생각할 수 있는 유일한 것은 자주 사용되는 함수에 대한 래퍼 클래스를 작성하는 것뿐입니다...

내 생각에 이 모든 것은 VS.NET 2010과 C# 4.0에 도입된 새로운 언어 구성으로 처리됩니다(C#에는 선택적 인수가 있습니다).

사무실 개발과 관련된 변경 사항은 채널9의 PDC 2008에서 Anders Hejlberg가 제작한 비디오를 참조하십시오.

해당 링크를 찾을 수 없지만 이것도 도움이 될 수 있습니다.
http://channel9.msdn.com/shows/Going+Deep/Inside-C-40-dynamic-type-Optional-parameters-more-COM-Friendly/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top