Procedura: utilizzare proprietà indicizzate nella programmazione dell'interoperabilità COM (Guida per programmatori C#)
Le proprietà indicizzate migliorano l'utilizzo delle proprietà COM dotate di parametri nella programmazione C#.Tali proprietà operano congiuntamente ad altre funzionalità introdotte in Visual C# 2010, ad esempio gli argomenti denominati e facoltativi, un nuovo tipo (dynamic) e le informazioni sul tipo incorporate per migliorare la programmazione di Microsoft Office.
Nelle versioni precedenti di C#, i metodi sono accessibili come proprietà solo se il metodo get non dispone di parametri e il metodo set dispone di un unico parametro di valore.Non tutte le proprietà COM soddisfano tuttavia tali restrizioni.Ad esempio, la proprietà Range di Excel dispone di una funzione di accesso get che richiede un parametro per il nome dell'intervallo.In passato, poiché non era possibile accedere direttamente alla proprietà Range, era necessario utilizzare il metodo get_Range, come illustrato nell'esempio seguente.
// Visual C# 2008 and earlier.
var excelApp = new Excel.Application();
// . . .
Excel.Range targetRange = excelApp.get_Range("A1", Type.Missing);
Le proprietà indicizzate consentono invece di scrivere quanto segue:
// Visual C# 2010.
var excelApp = new Excel.Application();
// . . .
Excel.Range targetRange = excelApp.Range["A1"];
[!NOTA]
Nell'esempio precedente viene inoltre utilizzata la funzionalità degli argomenti facoltativi, introdotta in Visual C# 2010, che consente di omettere Type.Missing.
In modo analogo, per impostare il valore della proprietà Value di un oggetto Range in Visual C# 2008 e versioni precedenti sono necessari due argomenti.Uno fornisce un argomento per un parametro facoltativo che specifica il tipo del valore di intervallo.L'altro fornisce il valore per la proprietà Value.Prima di Visual C# 2010, C# consentiva un solo argomento.Anziché utilizzare un metodo set normale, è necessario utilizzare il metodo set_Value o una proprietà diversa, Value2.Queste tecniche vengono illustrate negli esempi riportati di seguito.Entrambe impostano il valore della cella A1 su Name.
// Visual C# 2008.
targetRange.set_Value(Type.Missing, "Name");
// Or
targetRange.Value2 = "Name";
Le proprietà indicizzate consentono invece di scrivere il codice riportato di seguito.
// Visual C# 2010.
targetRange.Value = "Name";
Non è possibile creare proprietà indicizzate personalizzate.La funzionalità supporta solo l'utilizzo di proprietà indicizzate esistenti.
Esempio
Nel codice seguente viene illustrato un esempio completo.Per ulteriori informazioni sulla configurazione di un progetto che accede all'API di Office, vedere Procedura: accedere agli oggetti di interoperabilità di Office utilizzando le funzionalità di Visual C# 2010 (Guida per programmatori 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";
}
}
}
Vedere anche
Attività
Procedura dettagliata: programmazione di Office (C# e Visual Basic)
Riferimenti
Concetti
Argomenti denominati e facoltativi (Guida per programmatori C#)