Best Practice für Parameter in Microsoft Visual Studio Tools for Office (VSTO) 3 (C #) vorbei

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

Frage

Viele der Parameter für die mit dem Objektmodell des Office der Interaktion in VSTO erfordern Objektparameter, die als Referenz übergeben werden, selbst wenn der fiktive Typ des Parameters ein int oder String ist.

  1. Ich nehme an, dass dieser Mechanismus verwendet wird, so dass der Code die Parameter ändern kann, obwohl ich nicht herausfinden kann, warum diese als generisches Objekt übergeben werden müssen, anstatt wie ihre entsprechenden Typen. Kann mich jemand aufklären?
  2. Der Mechanismus I (von Hilfe und MSDN Ressourcen cribbed) wurde verwendet habe, im Wesentlichen schafft ein generisches Objekt, das die entsprechenden Daten enthält, und dann geht das auf das Verfahren, zum Beispiel:

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

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

Dies scheint eine Menge zusätzlichen Code, aber ich kann keine bessere Art und Weise zu tun, es sehen. Ich bin sicher, ich bin etwas fehlt; Was ist es? Oder ist dies wirklich die beste Praxis?

War es hilfreich?

Lösung

Ich glaube, es war nur ein schlechtes Design des ursprünglichen Word-Objektmodell. Ich weiß, dass Strings durch Bezugnahme vorbei in der COM-Welt etwas schneller sein, weil es die Notwendigkeit vermeidet, eine Kopie zu machen, so vielleicht war Teil der Begründung. Aber der Nachteil ist, dass der Angerufene den Wert ändern kann, und in den meisten Fällen mit Word sie sind Eingabeparameter.

Ich denke, Ihre Technik ist die beste Praxis.

: Für die Millionen von optionalen Parametern, die viele der Word-Objektmodell Methoden benötigen, können Sie ein einzelnes statisches Feld „fehlt“ so etwas wie erstellen

Objekt fehlt = Type.Missing;

// Beispiel Objekt filename = ... Document.SaveAs (ref filename, ref fehlt, ref fehlt, ref fehlt,                 ref fehlt, ref fehlt, ref fehlt, ref fehlt, ref fehlt,                 ref fehlt, ref fehlt, ref fehlt, ref fehlt, ref fehlt,                 ref fehlt, ref fehlt);

Andere Tipps

Ich bin mit Joe. Ich selbst entwickelt Helfer structs und Klassen wie diese:

internal struct Argument
{
    internal static object False = false;

    internal static object Missing = System.Type.Missing;

    internal static object True = true;
}

Und diese:

/// <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";
}

Und ein paar mehr ...

würde ich auch daran interessiert sein. Ich bin Codierung mehrere Anwendungen, die Automatisierung in Word verwendet, und ich habe auch Dinge wie

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

Es ist sehr böse, aber es ist der einzige Weg, die ich bisher kennen.

Das einzige, was ich von schreibt eine Wrapper-Klasse für die häufig verwendeten Funktionen denken kann ...

denke ich, dies alles ist gesorgt mit VS.NET 2010 und neue Sprachkonstrukte in C # 4.0 eingeführt (c # werden optionale Argumente haben).

Sehen Sie das Video von Anders Hejlberg bei PDC 2008 auf Channel9 für Änderungen an Office-Entwicklung.

Ich kann nicht auf diesen Link finden aber auch hilfreich sein könnte.
http : //channel9.msdn.com/shows/Going+Deep/Inside-C-40-dynamic-type-optional-parameters-more-COM-friendly/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top