Практическое руководство. Использование индексированных свойств в программировании 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# 2010 (Руководство по программированию на 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# 2010 (Руководство по программированию на C#)

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

Ссылки

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

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

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

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

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