Практическое руководство. Использование индексированных свойств в программировании COM-взаимодействия (Руководство по программированию на C#)

Индексированные свойства делают использование свойств COM с параметрами при программировании на C# более удобным. Индексированные свойства используются совместно с другими компонентами, представленными в Visual C# 2010, например именованными и необязательными аргументами, новым типом (dynamic) и внедренными сведениями о типах для расширения возможностей программирования для Microsoft Office.

В более ранних версиях C# методы доступны как свойства только при условии, что у метода get нет параметров, а у метода set есть только один параметр значения. Однако не все свойства COM удовлетворяют этим ограничениям. Например, свойство Range Excel имеет метод доступа get, которому требуется параметр для имени диапазона. Раньше из-за отсутствия возможности прямого обращения к свойству Range приходилось использовать вместо этого метод get_Range, как показано в следующем примере.

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

Индексированные свойства позволяют вместо этого использовать следующий код:

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

Примечание

В предыдущем примере также используются необязательные аргументы, представленные в Visual C# 2010, которые позволяют опустить Type.Missing.

Подобным образом для задания значения свойства Value объекта Range в Visual C# 2008 и более ранних версий требуется два аргумента. Один предоставляет аргумент для необязательного параметра, указывающего тип значения диапазона. Другой предоставляет значение для свойства Value. До появления Visual C# 2010 язык C# допускал использование всего одного аргумента. Поэтому вместо использования обычного метода "set" необходимо использовать метод set_Value или другое свойство — Value2. В следующих примерах демонстрируются эти методы. В примерах ячейке A1 задается значение Name.

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

Индексированные свойства позволяют вместо этого использовать следующий код.

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

Разработчики не могут создавать собственные индексированные свойства. Эта функция поддерживает только использование имеющихся индексированных свойств.

Пример

Ниже приведен полный пример кода. Подробные сведения о создании проекта, обращающегося к Office API, см. в разделе Практическое руководство. Доступ к объектам взаимодействия Office с помощью функций языка Visual C# (Руководство по программированию на 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";

        }
    }
}

См. также

Задачи

Практическое руководство. Использование именованных и необязательных аргументов в программировании приложений Office (Руководство по программированию на C#)

Практическое руководство. Доступ к объектам взаимодействия Office с помощью функций языка Visual C# (Руководство по программированию на C#)

Пошаговое руководство. Программирование приложений Office (C# и Visual Basic)

Ссылки

dynamic (Справочник по C#)

Основные понятия

Именованные и необязательные аргументы (Руководство по программированию на C#)

Другие ресурсы

Использование типа dynamic (Руководство по программированию на C#)