• Visual Studio 2010在COM互操作中使用索引属性


     索引属性可改善有参数的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";
      }
      }
      }
  • 相关阅读:
    【转载】常考算法模板
    NOIP2020微信步数暴力80分
    NOIP2020移球游戏快速排序满分程序
    第一场NOI Online能力测试入门组B跑步
    【转】STL之Set——插入元素、二分查找元素(log级别)
    [转载]图论500题
    差分约束系统简单介绍(入门)
    辗转相除法的证明
    并查集2个优化——按秩合并和路径压缩
    递推算法之平面分割问题总结
  • 原文地址:https://www.cnblogs.com/Nadim/p/1702945.html
Copyright © 2020-2023  润新知