如何:在 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 的詳細資訊,請參閱 如何:使用 Visual C# 功能存取 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";
}
}
}
請參閱
工作
如何:在 Office 程式設計中使用具名和選擇性引數 (C# 程式設計手冊)
如何:使用 Visual C# 功能存取 Office Interop 物件 (C# 程式設計指南)
逐步解說:Office 程式設計 (C# 和 Visual Basic)