Porady: użycie właściwości indeksowanych w programowaniu usługi międzyoperacyjnej modelu COM (Przewodnik programowania w języku C#)How to: Use Indexed Properties in COM Interop Programming (C# Programming Guide)

Właściwości indeksowane ulepszają sposób, w jaki właściwości com, które mają parametry są C# używane w programowaniu.Indexed properties improve the way in which COM properties that have parameters are consumed in C# programming. Właściwości indeksowane współpracują z innymi funkcjami w C#wizualizacji, takimi jak argumenty nazwane i opcjonalne, nowy typ (dynamiczny) i Informacje o typie osadzonym, aby usprawnić programowanie Microsoft Office.Indexed properties work together with other features in Visual C#, such as named and optional arguments, a new type (dynamic), and embedded type information, to enhance Microsoft Office programming.

We wcześniejszych wersjach programu C#metody są dostępne jako właściwości tylko wtedy, gdy metoda get nie ma parametrów, a metoda set ma jeden i tylko jeden parametr value.In earlier versions of C#, methods are accessible as properties only if the get method has no parameters and the set method has one and only one value parameter. Jednak nie wszystkie właściwości COM spełniają te ograniczenia.However, not all COM properties meet those restrictions. Na przykład właściwość Range[Object, Object] programu Excel ma metodę dostępu get, która wymaga parametru dla nazwy zakresu.For example, the Excel Range[Object, Object] property has a get accessor that requires a parameter for the name of the range. W przeszłości, ponieważ nie można uzyskać dostępu do właściwości Range bezpośrednio, zamiast tego należy użyć metody get_Range, jak pokazano w poniższym przykładzie.In the past, because you could not access the Range property directly, you had to use the get_Range method instead, as shown in the following example.

// Visual C# 2008 and earlier.
var excelApp = new Excel.Application();
// . . .
Excel.Range targetRange = excelApp.get_Range("A1", Type.Missing);

Właściwości indeksowane umożliwiają napisanie następujących danych:Indexed properties enable you to write the following instead:

// Visual C# 2010.
var excelApp = new Excel.Application();
// . . .
Excel.Range targetRange = excelApp.Range["A1"];

Uwaga

W poprzednim przykładzie jest również stosowana funkcja argumentów opcjonalnych , która pozwala pominąć Type.Missing.The previous example also uses the optional arguments feature, which enables you to omit Type.Missing.

Podobnie, aby ustawić wartość właściwości Value obiektu Range w C# 3,0 i wcześniejszych, wymagane są dwa argumenty.Similarly to set the value of the Value property of a Range object in C# 3.0 and earlier, two arguments are required. Jeden dostarcza argument dla opcjonalnego parametru, który określa typ wartości zakresu.One supplies an argument for an optional parameter that specifies the type of the range value. Pozostałe dostarczają wartość właściwości Value.The other supplies the value for the Value property. Poniższe przykłady ilustrują te techniki.The following examples illustrate these techniques. Ustaw wartość komórki a1 na Name.Both set the value of the A1 cell to Name.

// Visual C# 2008.
targetRange.set_Value(Type.Missing, "Name");
// Or
targetRange.Value2 = "Name";

Właściwości indeksowane umożliwiają zapisanie w zamian poniższego kodu.Indexed properties enable you to write the following code instead.

// Visual C# 2010.
targetRange.Value = "Name";

Nie można tworzyć własnych właściwości indeksowanych.You cannot create indexed properties of your own. Funkcja obsługuje tylko użycie istniejących właściwości indeksowanych.The feature only supports consumption of existing indexed properties.

PrzykładExample

Poniższy kod przedstawia kompletny przykład.The following code shows a complete example. Aby uzyskać więcej informacji o konfigurowaniu projektu, który uzyskuje dostęp do interfejsu API pakietu Office, zobacz How to: dostęp do obiektów międzyoperacyjności pakietu Office za pomocą funkcji wizualnych C# .For more information about how to set up a project that accesses the Office API, see How to: Access Office Interop Objects by Using Visual C# Features.

// 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";

        }
    }
}

Zobacz takżeSee also