首页  ·  知识 ·  编程语言
在COM互操作中使用索引属性
网友  收集  .NET  编辑:德仔   图片来源:网络
 索引属性可改善有参数的COM属性在C#编程中的使用方式。索引属性与命名参数和可选参数、一个新类(动态类)和嵌入式类型信息等Visual C# 2010中推出
 索引属性可改善有参数的COM属性在C#编程中的使用方式。索引属性与命名参数和可选参数、一个新类(动态类)和嵌入式类型信息等Visual C# 2010中推出的其它属性一起工作以增强微软Office编程。
  在早期版本的C#中,只要Get方式没有参数和Set方式只有一个参数和唯一的一个值参数,方式就可以作为属性访问。然而,并非所有的COM属性都能够满足这些严格的限制。例如,Excel Range属性有一个Get访问器,需要为这个Range的名称提供一个参数。在过去,由于你不能直接访问这个Range属性,你必须使用get_Range方式,如下面的例子所示:
 
 C#
  // Visual C# 2008 and earlier.
  var excelApp = new Excel.Application();
  // . . .
  Excel.Range targetRange = excelApp.get_Range("A1", Type.Missing);
  索引属性能够让你写如下代码:
  C#
  // Visual C# 2010.
  var excelApp = new Excel.Application();
  // . . .
  Excel.Range targetRange = excelApp.Range["A1"];
  备注:上面的例子还使用了Visual C# 2010中推出的可选参数功能。这个功能可以让你删除Type.Missing。
  同样,要设置Visual C# 2008和更早版本中的一个Range(范围)对象的值属性的值,需要两个参数。一个是提供指定这个Range值类型的可选参数的一个参数。另一个是提供这个值属性的值的参数。在Visual C# 2010之前,C#仅允许一个参数。因此,不使用一个正常的Set方式,你必须使用set_Value方式或者使用一个不同的属性Value2。下面的例子说明了这些技术。这两种方法都把A1单元的值设置为“Name”。
  C#
  // Visual C# 2008.
  targetRange.set_Value(Type.Missing, "Name");
  // Or
  targetRange.Value2 = "Name";
  索引属性能够让你编写如下代码代替:
  C#
  // Visual C# 2010.
  targetRange.Value = "Name";
  你不能创建你自己的索引属性。这个功能仅支持现有的索引属性的消耗。
  例子
  下面的代码显示了一个完整的例子。要了解更多的有关如何设置一个访问Office API的项目,参见“技巧:使用Visual C# 2010功能访问Office互操作对象”(C#编程指南)。网址是:http://msdn.microsoft.com/en-us/library/dd264733(VS.100).aspx
  
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";
  }
  }
  }
 
本文作者:网友 来源:网络收集
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读