Errore del compilatore C3293
'accessor': usare 'default' per accedere alla proprietà predefinita (indexer) per la classe 'type'
L'accesso a una proprietà indicizzata non è stato eseguito correttamente. Per altre informazioni, vedere Procedura: Usare le proprietà in C++/CLI .
Visual Studio 2017 e versioni successive: in Visual Studio 2015 e versioni precedenti, il compilatore in alcuni casi identifica erroneamente una proprietà predefinita come indicizzatore predefinito. È stato possibile risolvere il problema usando l'identificatore "default" per accedere alla proprietà. Questa soluzione è diventata problematica dopo che il termine "default" è stato introdotto come parola chiave in C++11. Pertanto, in Visual Studio 2017 sono stati corretti i bug che richiedevano la soluzione e il compilatore genera ora un errore quando si usa "default" per accedere alla proprietà predefinita per una classe.
Esempio
L'esempio seguente genera l'errore C3293 in Visual Studio 2015 e versioni precedenti.
// C3293.cpp
// compile with: /clr /c
using namespace System;
ref class IndexerClass {
public:
// default indexer
property int default[int] {
int get(int index) { return 0; }
void set(int index, int value) {}
}
};
int main() {
IndexerClass ^ ic = gcnew IndexerClass;
ic->Item[0] = 21; // C3293 in VS2015 OK in VS2017
ic->default[0] = 21; // OK in VS2015 and earlier
String ^s = "Hello";
wchar_t wc = s->Chars[0]; // C3293 in VS2015 OK in VS2017
wchar_t wc2 = s->default[0]; // OK in VS2015 and earlier
Console::WriteLine(wc2);
}