Override espliciti (C++/CLI e C++/CX)
Questo argomento descrive come eseguire l'override esplicito di un membro di una classe base o di un'interfaccia di base. Un override denominato (esplicito) deve essere usato solo per eseguire l'override di un metodo con un metodo derivato che ha un nome diverso.
Tutti i runtime
Sintassi
overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }
Parametri
overriding-function-declarator
Elenco di tipi, nomi e argomenti restituiti della funzione di override. Si noti che la funzione di override non deve avere lo stesso nome della funzione sottoposta a override.
type
Tipo di base che contiene una funzione di cui eseguire l'override.
function
Elenco delimitato da virgole di uno o più nomi di funzione di cui eseguire l'override.
overriding-function-definition
Istruzioni del corpo della funzione che definiscono la funzione di override.
Osservazioni:
Usare sostituzioni esplicite per creare un alias per una firma del metodo o per fornire implementazioni diverse per i metodi con la stessa firma.
Per informazioni sulla modifica del comportamento di tipi ereditati e membri di tipi ereditati, vedere Identificatori di override.
Windows Runtime
Requisiti
Opzione del compilatore: /ZW
Common Language Runtime
Osservazioni:
Per informazioni sugli override espliciti in codice nativo o codice compilato con /clr:oldSyntax
, vedere Override espliciti.
Requisiti
Opzione del compilatore: /clr
Esempi
L'esempio di codice seguente mostra un semplice override implicito e l'implementazione di un membro in un'interfaccia di base, senza usare override espliciti.
// explicit_override_1.cpp
// compile with: /clr
interface struct I1 {
virtual void f();
};
ref class X : public I1 {
public:
virtual void f() {
System::Console::WriteLine("X::f override of I1::f");
}
};
int main() {
I1 ^ MyI = gcnew X;
MyI -> f();
}
X::f override of I1::f
L'esempio di codice seguente mostra come implementare tutti i membri di interfaccia con una firma comune, usando la sintassi degli override espliciti.
// explicit_override_2.cpp
// compile with: /clr
interface struct I1 {
virtual void f();
};
interface struct I2 {
virtual void f();
};
ref struct X : public I1, I2 {
virtual void f() = I1::f, I2::f {
System::Console::WriteLine("X::f override of I1::f and I2::f");
}
};
int main() {
I1 ^ MyI = gcnew X;
I2 ^ MyI2 = gcnew X;
MyI -> f();
MyI2 -> f();
}
X::f override of I1::f and I2::f
X::f override of I1::f and I2::f
L'esempio di codice seguente mostra in che modo l'override di una funzione può avere un nome diverso dalla funzione implementata.
// explicit_override_3.cpp
// compile with: /clr
interface struct I1 {
virtual void f();
};
ref class X : public I1 {
public:
virtual void g() = I1::f {
System::Console::WriteLine("X::g");
}
};
int main() {
I1 ^ a = gcnew X;
a->f();
}
X::g
L'esempio di codice seguente mostra un'implementazione esplicita dell'interfaccia che implementa una raccolta indipendente dai tipi.
// explicit_override_4.cpp
// compile with: /clr /LD
using namespace System;
ref class R : ICloneable {
int X;
virtual Object^ C() sealed = ICloneable::Clone {
return this->Clone();
}
public:
R() : X(0) {}
R(int x) : X(x) {}
virtual R^ Clone() {
R^ r = gcnew R;
r->X = this->X;
return r;
}
};