Compartilhar via


Como usar propriedades indexadas na programação para interoperabilidade COM (Guia de Programação em C#)

Indexado propriedades melhorar o modo no qual COM propriedades que possuem parâmetros são consumidas na programação de C#. Indexado propriedades funcionam com outros recursos introduzidos no Visual C# 2010, tais como argumentos nomeados e opcionais, um novo tipo (dinâmico), e informações de tipo incorporados, para melhorar a programação de Microsoft Office.

Em versões anteriores do C#, métodos são acessíveis como se propriedades do get método não tem parâmetros e o set método tem apenas um parâmetro de valor. No entanto, nem todas as propriedades COM atendem a essas restrições. Por exemplo, o Excel intervalo a propriedade tem um get acessador requer um parâmetro para o nome do intervalo. No passado, porque você não pôde acessar o Range propriedade diretamente, era necessário usar o get_Range método em vez disso, conforme mostrado no exemplo a seguir.

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

Propriedades indexadas permitem que você escrever, em vez disso, o seguinte:

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

Dica

O exemplo anterior também usa o argumentos opcionais recurso, introduzido no Visual C# 2010, que permite que você omita Type.Missing.

Da mesma forma, para definir o valor da Value propriedade de um intervalo de objeto no Visual C# 2008 e anteriores, dois argumentos são necessários. Uma fornece um argumento para um parâmetro opcional que especifica o tipo de valor de intervalo. O outro fornece o valor para o Value propriedade. Antes do Visual C# 2010, C# permitido apenas um argumento. Portanto, em vez de usar um método do conjunto regular, você precisava usar o set_Value método ou propriedade diferente, valor2. Os exemplos a seguir ilustram essas técnicas. Ambos definir o valor da célula A1 para Name.

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

Propriedades indexadas permitem que você escreva o seguinte código em vez disso.

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

Você não pode criar propriedades indexadas de sua preferência. O recurso suporta apenas o consumo de propriedades indexadas existentes.

Exemplo

O código a seguir mostra um exemplo completo. Para obter mais informações sobre como configurar um projeto que acessa a API do Office, consulte Como acessar objetos de interoperabilidade do Office usando recursos do Visual C# (Guia de Programação em 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";

        }
    }
}

Consulte também

Tarefas

Como usar argumentos nomeados e opcionais na programação do Office (Guia de Programação em C#)

Como acessar objetos de interoperabilidade do Office usando recursos do Visual C# (Guia de Programação em C#)

Passo a passo: Programação do Office (C# e Visual Basic)

Referência

dynamic (Referência de C#)

Conceitos

Argumentos nomeados e opcionais (Guia de Programação em C#)

Outros recursos

Usando o tipo dynamic (Guia de Programação em C#)