如何在 COM 互操作编程中使用索引属性
结合使用索引属性与 C# 中的其他功能(如命名参数和可选参数、一种新类型 (dynamic) 以及嵌入类型信息)可以增强 Microsoft Office 编程的功能。
重要
VSTO (Visual Studio Tools for Office) 依赖于 .NET Framework。 COM 加载项也可以使用 .NET Framework 编写。 不能使用 .NET Core 和 .NET 5+(最新版本的 .NET)创建 Office 加载项。 这是因为 .NET Core/.NET 5+ 无法在同一进程中与 .NET Framework 协同工作,并可能导致加载项加载失败。 可以继续使用 .NET Framework 编写适用于 Office 的 VSTO 和 COM 加载项。 Microsoft 不会更新 VSTO 或 COM 加载项平台以使用 .NET Core 或 .NET 5+。 可以利用 .NET Core 和 .NET 5+(包括 ASP.NET Core)创建 Office Web 加载项的服务器端。
在早期版本的 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";
}
}
}
请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈