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