Migliori pratiche per il passaggio di parametri in Microsoft Visual Studio Tools per Office (VSTO) 3 (C#)

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

Domanda

Molti dei parametri per l'interazione con il modello a Oggetti di Office in VSTO che richiedono oggetto di parametri che vengono passati per riferimento, anche quando il valore nozionale del tipo di parametro è un intero o una stringa.

  1. Suppongo che questo meccanismo è utilizzato in modo che il codice può modificare il parametro, anche se io non riesco a capire perché questi devono essere passati come oggetto generico, invece di loro più tipi appropriati.Qualcuno può illuminarmi?
  2. Il meccanismo sto usando (copiata da aiutare e MSDN risorse) crea essenzialmente un oggetto generico che contiene i dati appropriati e passa, quindi, che per il metodo, per esempio:

    oggetto nextBookmarkName = "NextContent";oggetto nextBookmark = questo.Segnalibri.get_Item( rif nextBookmarkName ).Gamma;

    Microsoft.Office.Di interoperabilità.Parola.Gamma newRng = questo.Gamma( rif nextBookmark, rif nextBookmark );

Questo sembra un sacco di extra codice, ma non vedo un modo migliore per farlo.Sono sicuro che mi manca qualcosa;che cosa è?O è davvero la migliore pratica?

È stato utile?

Soluzione

Penso che sia stato solo poveri design originale del modello di oggetti di Word.So che il passaggio di stringhe da riferimento può essere leggermente più veloce nel mondo COM, perché evita la necessità di fare una copia, così, forse, che faceva parte della giustificazione.Ma il rovescio della medaglia è che il chiamato può modificare il valore, e nella maggior parte dei casi con Word, che sono parametri di input.

Penso che la tua tecnica è la migliore pratica.Per i milioni di parametri opzionali che molti di modello a oggetti di Word metodi richiedono, è possibile creare un singolo campo statico "manca" qualcosa di simile a:

oggetto mancante = Tipo.Mancanti;

// Esempio oggetto fileName = ...documento.SaveAs(rif fileName, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti, rif mancanti);

Altri suggerimenti

Sono d'accordo con Joe.Ho anche sviluppato helper strutture e classi come questa:

internal struct Argument
{
    internal static object False = false;

    internal static object Missing = System.Type.Missing;

    internal static object True = true;
}

E questo:

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

E un paio di più...

Sarei interessato a questo.Io sono di codifica diverse applicazioni che utilizza l'automazione di Word e ho anche cose come

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

E ' molto brutto, ma è l'unico modo che conosco finora.

L'unica cosa che posso pensare è la scrittura di una classe wrapper per le funzioni utilizzate più di frequente...

Penso, tutto questo è preso cura di, con VS.NET 2010 e di nuovo i costrutti del linguaggio introdotto in c# 4.0 (c# si hanno argomenti facoltativi).

Vedere il video da Anders Hejlberg a PDC 2008 su channel9 per le modifiche relative per lo sviluppo di office.

Non posso trovare quel link, ma questo potrebbe anche essere utile.
http://channel9.msdn.com/shows/Going+Deep/Inside-C-40-dynamic-type-optional-parameters-more-COM-friendly/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top