HOW TO:在 COM Interop 程式設計中使用索引的屬性 (C# 程式設計手冊)

「索引的屬性」(Indexed Property) 可改善具有參數的 COM 屬性用於 C# 程式設計中的方式。 索引的屬性可與 Visual C# 2010 中引入的其他功能搭配使用,例如具名和選擇性引數、新的型別 (dynamic) 和內嵌型別資訊,以增強 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"];
注意事項注意事項

上述範例也用到選擇性引數功能 (Visual C# 2010 引入的新功能),可讓您省略 Type.Missing。

同樣地,若要在 Visual C# 2008 和較舊版本中設定 Range 物件的 Value 屬性,則需要兩個引數。 一個提供引數給用於指定範圍值型別的選擇性參數。 另一個則提供 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 的詳細資訊,請參閱 HOW TO:使用 Visual C# 2010 功能存取 Office Interop 物件 (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";

        }
    }
}

請參閱

工作

HOW TO:在 Office 程式設計中使用具名和選擇性引數 (C# 程式設計手冊)

HOW TO:使用 Visual C# 2010 功能存取 Office Interop 物件 (C# 程式設計手冊)

參考

dynamic (C# 參考)

概念

具名和選擇性引數 (C# 程式設計手冊)

其他資源

使用動態型別 (C# 程式設計手冊)

逐步解說:Office 程式設計 (C# 和 Visual Basic)