Procedimiento para usar propiedades indizadas en la programación de interoperabilidad COM

Las propiedades indexadas funcionan junto con otras características de C#, como los argumentos con nombre y opcionales, un nuevo tipo (dinámico) y la información de tipo incrustada, para mejorar la programación en Microsoft Office.

Importante

VSTO (Visual Studio Tools para Office) se basa en .NET Framework. Los complementos COM también se pueden escribir con .NET Framework. No se pueden crear complementos de Office con .NET Core y .NET 5 o versiones posteriores, las últimas versiones de .NET. Esto se debe a que .NET Core/.NET 5 o versiones posteriores no pueden funcionar junto con .NET Framework en el mismo proceso, y se pueden provocar errores de carga de complementos. Puede seguir usando .NET Framework a fin de escribir complementos VSTO y COM para Office. Microsoft no actualizará VSTO ni la plataforma de complementos COM para usar .NET Core, o .NET 5 o versiones posteriores. Puede utilizar .NET Core y .NET 5 o versiones posteriores, incluido ASP.NET Core, para crear el lado servidor de complementos web de Office.

En versiones anteriores de C#, los métodos son solo accesibles como propiedades si el método get no tiene ningún parámetro y el método set tiene solo un parámetro de valor. En cambio, no todas las propiedades COM cumplen esas restricciones. Por ejemplo, la propiedad Range[] de Excel tiene un descriptor de acceso get que requiere un parámetro para el nombre del intervalo. Antes, como no había acceso directo a la propiedad Range, había que usar el método get_Range en su lugar, como se muestra en el ejemplo siguiente.

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

Las propiedades indexadas, en cambio, permiten escribir lo siguiente:

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

En el ejemplo anterior, también se usa la característica argumentos opcionales, que le permite omitir Type.Missing.

Las propiedades indexadas permiten escribir el siguiente código.

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

No se pueden crear propiedades indexadas propias. La característica solo admite el uso de las propiedades indizadas existentes.

Ejemplo

En el código siguiente se muestra un ejemplo completo. Para más información sobre cómo preparar un proyecto con acceso a la API de Office, consulte Procedimiento Tener acceso a objetos de interoperabilidad de Office mediante las características de Visual C# (Guía de programación de 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();
        }

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

Vea también