Cómo: Utilizar propiedades indizadas en la programación de interoperabilidad COM (Guía de programación de C#)

Las propiedades indizadas mejoran la manera en que se utilizan las propiedades COM con parámetros en programación de C#. Las propiedades indizadas funcionan junto con otras características presentadas en Visual C# 2010, 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.

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. Sin embargo, no todas las propiedades COM cumplen esas restricciones. Por ejemplo, la propiedad Range 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 utilizar el método get_Range, como se muestra en el siguiente ejemplo.

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

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

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

Nota

En el ejemplo anterior, también se utiliza la característica argumentos opcionales, que se incluye en Visual C# 2010 y que permite omitir Type.Missing.

De forma similar, para establecer el valor de la propiedad Value de un objeto Range de Visual C# 2008 y versiones anteriores, se necesitan dos argumentos. Uno proporciona un argumento para un parámetro opcional que especifica el tipo del valor del intervalo. El otro proporciona el valor de la propiedad Value. Antes de Visual C# 2010, C# permitía solo un argumento. Por consiguiente, en lugar de utilizar un método set normal, había que utilizar el método set_Value o una propiedad diferente, Value2. Estas técnicas se ilustran en los siguientes ejemplos. En ambos ejemplos, se establece el valor de la celda A1 en Name.

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

Las propiedades indizadas, en cambio, permiten escribir el código siguiente.

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

El usuario no puede crear propiedades indizadas. La característica solo admite el uso de propiedades indizadas existentes.

Ejemplo

El código siguiente contiene un ejemplo completo. Para obtener más información sobre cómo preparar un proyecto con acceso a la API de Office, vea Cómo: Tener acceso a objetos de interoperabilidad de Office mediante las características de Visual C# 2010 (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();
            //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";

        }
    }
}

Vea también

Tareas

Cómo: Usar argumentos opcionales y con nombre en la programación de Office (Guía de programación de C#)

Cómo: Tener acceso a objetos de interoperabilidad de Office mediante las características de Visual C# 2010 (Guía de programación de C#)

Referencia

dynamic (Referencia de C#)

Conceptos

Argumentos opcionales y con nombre (Guía de programación de C#)

Otros recursos

Uso de tipo dinámico (Guía de programación de C#)

Tutorial: Programación de Office (C# y Visual Basic)