如何在 COM 互操作编程中使用索引属性(C# 编程指南)

索引属性改进了在 C# 编程中使用具有参数的 COM 属性的方式。 结合使用索引属性与 Visual C# 中的其他功能(如命名实参和可选实参、一种新类型(动态)以及嵌入类型信息)可以增强 Microsoft Office 编程。

在早期版本的 C# 中,仅当 get 方法没有参数且 set 方法有且只有一个值参数时,方法才能作为属性访问。 但是,并非所有 COM 属性都符合上述限制。 例如,Excel Range[] 属性具有一个 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"];

上一示例还使用了可选实参功能,以便忽略 Type.Missing

利用索引属性,你可以编写以下代码。

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

你不能创建自己的索引属性。 该功能仅支持使用现有索引属性。

示例

以下代码显示完整示例。 有关如何设置访问 Office API 的项目的详细信息,请参阅如何使用 C# 功能访问 Office 互操作对象

// 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();
        }

        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";
        }
    }
}

请参阅