Comment utiliser des propriétés indexées en COM Interop programmation (Guide de programmation C#)

Les propriétés indexées améliorent la façon dont les propriétés COM avec des paramètres sont consommées dans la programmation C#. Les propriétés indexées fonctionnent avec d’autres fonctionnalités dans Visual C#, comme les arguments nommés et facultatifs, un nouveau type (dynamique) et les informations de type incorporées, pour améliorer la programmation Microsoft Office.

Dans les versions antérieures de C#, les méthodes sont accessibles comme des propriétés uniquement si la méthode get n’a aucun paramètre et que la méthode set a un seul et unique paramètre de valeur. Toutefois, toutes les propriétés COM ne respectent pas ces restrictions. Par exemple, la propriété Range[] d’Excel a un accesseur get, qui nécessite un paramètre pour le nom de la plage. Dans le passé, parce que vous ne pouviez pas accéder à la propriété Range directement, vous deviez utiliser la méthode get_Range à la place, comme indiqué dans l’exemple suivant.

// Visual C# 2008 and earlier.
var excelApp = new Excel.Application();
// . . .
Excel.Range targetRange = excelApp.get_Range("A1", Type.Missing);

Les propriétés indexées vous permettent d’écrire ce qui suit à la place :

// Visual C# 2010.
var excelApp = new Excel.Application();
// . . .
Excel.Range targetRange = excelApp.Range["A1"];

Notes

L’exemple précédent utilise également la fonctionnalité des arguments facultatifs, qui vous permet d’omettre Type.Missing.

De même, pour définir la valeur de la propriété Value d’un objet Range dans C# 3.0 et les versions antérieures, deux arguments sont nécessaires. L’un fournit un argument pour un paramètre facultatif qui spécifie le type de la valeur de la plage. L’autre fournit la valeur de la propriété Value. Les exemples suivants illustrent ces techniques. Les deux définissent la valeur de la cellule A1 sur Name.

// Visual C# 2008.
targetRange.set_Value(Type.Missing, "Name");
// Or
targetRange.Value2 = "Name";

Les propriétés indexées vous permettent d’écrire le code suivant à la place.

// Visual C# 2010.
targetRange.Value = "Name";

Vous ne pouvez pas créer vos propres propriétés indexées. La fonctionnalité prend uniquement en charge la consommation de propriétés indexées existantes.

Exemple

L'exemple de code suivant illustre l'exemple complet. Pour plus d’informations sur la configuration d’un projet qui accède à l’API Office, consultez Comment accéder aux objets Office Interop à l’aide des fonctionnalités C#.

// You must add a reference to Microsoft.Office.Interop.Excel to run
// this example.
using System;
using Excel = Microsoft.Office.Interop.Excel;

namespace IndexedProperties
{
    class Program
    {
        static void Main(string[] args)
        {
            CSharp2010();
            //CSharp2008();
        }

        static void CSharp2010()
        {
            var excelApp = new Excel.Application();
            excelApp.Workbooks.Add();
            excelApp.Visible = true;

            Excel.Range targetRange = excelApp.Range["A1"];
            targetRange.Value = "Name";
        }

        static void CSharp2008()
        {
            var excelApp = new Excel.Application();
            excelApp.Workbooks.Add(Type.Missing);
            excelApp.Visible = true;

            Excel.Range targetRange = excelApp.get_Range("A1", Type.Missing);
            targetRange.set_Value(Type.Missing, "Name");
            // Or
            //targetRange.Value2 = "Name";
        }
    }
}

Voir aussi